Определение сборки подкласса с помощью метода в базовом классе - PullRequest
3 голосов
/ 16 августа 2010

Скажем, у меня есть базовый класс в сборке A:

public class MyBaseClass{
    public static Assembly GetMyAssembly(){
     //determine the Assembly of my subclasses
    }
}

Затем я создаю подкласс этого класса в сборке B:

public class MySubClass : MyBaseClass {
}

Оттуда в моем доменелогика я вызываю MySubClass.GetMyAssembly ().Эта логика может быть в той же сборке, что и MySubClass, ИЛИ может быть в отдельной сборке.Как определить сборку, содержащую подкласс, который вызывает унаследованный метод?(без переопределения) Я попытался использовать различные методы Assembly.Get * () в System.Reflection без какой-либо удачи.

Ответы [ 2 ]

1 голос
/ 16 августа 2010

Вы не можете. Этот статический метод действительно действительно живет в сборке с базовым типом.

Лучшее, что вы можете сделать, - это использовать метод экземпляра (опустите ключевое слово static), чтобы у кода был доступ к ссылке this . Выражение this.GetType () дает вам производный тип. Его свойство Assembly дает сборку, которая содержит производный тип.

0 голосов
/ 16 августа 2010

Я бы порекомендовал вместо того, чтобы использовать Assembly.Get*() методы, вы взгляните на сам объект Type - у него есть несколько очень полезных свойств и методов:

this.GetType().BaseType.Assembly;

Если вы хотите просто получить сборку определенного базового класса, вам нужно будет использовать typeof(MyBaseClass).Assembly - поскольку ваш класс должен знать о своей цепочке наследования, я не думаю, что это будет проблемой ,

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...