来自基本共享构造函数的更具体的类型

时间:2010-11-26 12:13:50

标签: vb.net reflection shared

如何使用反射作为基类中共享构造函数的最通用类型:

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。有可能吗?

1 个答案:

答案 0 :(得分:2)

首先,您似乎想要找到最多派生的类型(或最特定的类型),而不是最通用的类​​型 - 这意味着相反(要么涉及到泛型,要么正在寻找最常见的一般类型。)

虽然可以使用反射进行此操作,但您对它的需求可能表明您的类设计错误或不是最佳。

首先,构造函数不是虚方法,因此在构造函数(IIRC)中,Me对象引用属于包含此构造函数的类型。

您可以做的是反映所有程序集的类型,并查找从Foo派生的所有类型。然后,您必须构建这些类型的继承图,并为每个类型分配一个数字,说明从Foo(继承级别的数量)派生的距离。然后,您可以针对您已识别的所有类型检查Me对象引用(查看是否可以为每个类型强制转换Me),然后从该子集中选择一个最大的类型继承级别数。

我希望从这里,你会发现这可能不值得努力。重新思考为什么需要这样做会更有趣,也许更有帮助,如果可能的话,找到一种方法来避免它。