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

Vb.net 来自基本共享构造函数的更具体类型,vb.net,reflection,shared,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。有可能吗?首

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

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

首先,您似乎希望找到最派生的类型(或最特定的类型),而不是最泛型的类型——这意味着相反的情况(要么涉及泛型,要么正在寻找最通用的类型)

虽然可以使用反射来实现这一点,但您对反射的需求可能表明您的类设计错误,或者不够优化

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

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


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

你需要更具体一些。在您不知道的另一个程序集中继承您的类的类型呢?如果在同一继承级别有多个类型呢?你想深入到树的深处?你想要的是最具体的类型,而不是泛型。。。