如何使用反射作为基类中共享构造函数的最通用类型:
Public Class Foo()
Shared Sub New()
'Here we have code to get the type!
MethodBase.GetCurrentMethod().DeclaringType
End
End Class
Public Class Bar()
Inherits Foo
End Class
我希望结果为Bar
类型,而不是Foo
。有可能吗?
答案 0 :(得分:2)
首先,您似乎想要找到最多派生的类型(或最特定的类型),而不是最通用的类型 - 这意味着相反(要么涉及到泛型,要么正在寻找最常见的一般类型。)
虽然可以使用反射进行此操作,但您对它的需求可能表明您的类设计错误或不是最佳。
首先,构造函数不是虚方法,因此在构造函数(IIRC)中,Me
对象引用属于包含此构造函数的类型。
您可以做的是反映所有程序集的类型,并查找从Foo
派生的所有类型。然后,您必须构建这些类型的继承图,并为每个类型分配一个数字,说明从Foo
(继承级别的数量)派生的距离。然后,您可以针对您已识别的所有类型检查Me
对象引用(查看是否可以为每个类型强制转换Me
),然后从该子集中选择一个最大的类型继承级别数。
我希望从这里,你会发现这可能不值得努力。重新思考为什么需要这样做会更有趣,也许更有帮助,如果可能的话,找到一种方法来避免它。