假设我在程序集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 *()方法,没有任何运气。
答案 0 :(得分:1)
你做不到。这个静态方法确实 存在于具有基类型的程序集中。
您可以做的最好的事情是使用实例方法(省略静态关键字),以便代码可以访问 this 引用。 this.GetType()表达式为您提供派生类型。它的Assembly属性为您提供包含派生类型的程序集。
答案 1 :(得分:0)
我建议您不要使用Assembly.Get*()
方法,而是查看Type
对象本身 - 它有一些非常有用的属性和方法:
this.GetType().BaseType.Assembly;
如果您只想获取特定基类的程序集,则需要使用typeof(MyBaseClass).Assembly
- 因为您的类应该知道它的继承链,我不认为它会是一个问题。