Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/261.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 用基类中的方法确定子类的组装_C#_Reflection - Fatal编程技术网

C# 用基类中的方法确定子类的组装

C# 用基类中的方法确定子类的组装,c#,reflection,C#,Reflection,假设我在程序集a中有一个基类: public class MyBaseClass{ public static Assembly GetMyAssembly(){ //determine the Assembly of my subclasses } } 然后在程序集B中创建该类的子类: public class MySubClass : MyBaseClass { } 然后,在特定于域的逻辑中调用MySubClass.GetMyAssembly()。此逻辑可能与M

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

public class MyBaseClass{
    public static Assembly GetMyAssembly(){
     //determine the Assembly of my subclasses
    }
}
然后在程序集B中创建该类的子类:

public class MySubClass : MyBaseClass {
}

然后,在特定于域的逻辑中调用MySubClass.GetMyAssembly()。此逻辑可能与MySubClass位于同一程序集中,也可能位于单独的程序集中。如何确定包含调用继承方法的子类的程序集?(没有重写它)我尝试在System.Reflection中使用不同的Assembly.Get*()方法,但运气不好

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

this.GetType().BaseType.Assembly;

如果您希望只获取特定基类的程序集,则需要使用
typeof(MyBaseClass).assembly
——因为您的类应该知道其继承链,所以我认为这不会是一个问题

你不能。此静态方法确实存在于具有基类型的程序集中


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

如果如上所述,GetMyAssembly实际上是一个静态方法,那么除了您在其中定义它的类之外,代码不可能在任何程序集中执行。此外,由于它是静态的,因此也没有“覆盖”的情况发生。MySubClass.GetMyAssembly()将(除非您使用“new”Opartor)始终指向MyBaseClass中定义的实现。我等待OP的澄清,但听起来他想要的是相反的解决方案。从基类上下文中获取所有子类。如果是这样的话,他将别无选择,只能使用AppDomain.CurrentDomain.GetAssemblys()。哦,说得好。我想当我读到这个问题时,我可能还没有完全清醒。然而,我真的希望有一种类似于(self)的东西用于静态方法。。。特别是对于可继承类上的静态方法。这可能就是wintondeshong所寻找的。感谢您的回答以及您关于通过实例方法中的GetType()而不是静态方法检索给定类型的子类的程序集的建议。我希望它可以在一个单一的静态方法中供团队中的其他开发人员使用,但是还有其他方法可以简化实现。非常感谢你!