使用基类中的方法确定子类的程序集

时间:2010-08-16 13:29:44

标签: c# reflection

假设我在程序集A中有一个基类:

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

然后我在Assembly B中创建该类的子类:

public class MySubClass : MyBaseClass {
}

从那里,在我的域特定逻辑中,我调用MySubClass.GetMyAssembly()。此逻辑可以与MySubClass在同一个程序集中,也可以在单独的程序集中。如何确定包含调用继承方法的子类的程序集? (没有覆盖它)我试图在System.Reflection中使用不同的Assembly.Get *()方法,没有任何运气。

2 个答案:

答案 0 :(得分:1)

你做不到。这个静态方法确实 存在于具有基类型的程序集中。

您可以做的最好的事情是使用实例方法(省略静态关键字),以便代码可以访问 this 引用。 this.GetType()表达式为您提供派生类型。它的Assembly属性为您提供包含派生类型的程序集。

答案 1 :(得分:0)

我建议您不要使用Assembly.Get*()方法,而是查看Type对象本身 - 它有一些非常有用的属性和方法:

this.GetType().BaseType.Assembly;

如果您只想获取特定基类的程序集,则需要使用typeof(MyBaseClass).Assembly - 因为您的类应该知道它的继承链,我不认为它会是一个问题。