有 T 类型如何在程序集中找到扩展 Base<T> 的所有 类?
Having T type how to find all classes that expand Base<T> in assembly?
假设我有:
public class Base<T> {}
public class MyBaseOne : Base<int> {}
public class MyBaseTwo : Base<int> {}
具有 T 类型(例如 int)如何找到所有 类 在程序集中扩展 Base 并能够构造它们的新对象?
您可以使用 Type.IsAssignableFrom
:
var typeArgument = typeof(int);
var baseType = typeof(Base<>).MakeGenericType(typeArgument);
var matches = someAssembly.GetTypes()
.Where(t => typeof(baseType).IsAssignableFrom(t));
这将适用于您展示的示例,但不会找到(例如)Child<T>
,其中 Child
被描述为:
public class Child<T> : Base<T>
我假设您 想要找到可分配给 Base<T>
但没有 Base<T>
作为直接超类(即更长的类型层次结构)。如果你不这样做,那就更简单了:
var matches = someAssembly.GetTypes().Where(t => t.BaseType == baseType);
假设我有:
public class Base<T> {}
public class MyBaseOne : Base<int> {}
public class MyBaseTwo : Base<int> {}
具有 T 类型(例如 int)如何找到所有 类 在程序集中扩展 Base 并能够构造它们的新对象?
您可以使用 Type.IsAssignableFrom
:
var typeArgument = typeof(int);
var baseType = typeof(Base<>).MakeGenericType(typeArgument);
var matches = someAssembly.GetTypes()
.Where(t => typeof(baseType).IsAssignableFrom(t));
这将适用于您展示的示例,但不会找到(例如)Child<T>
,其中 Child
被描述为:
public class Child<T> : Base<T>
我假设您 想要找到可分配给 Base<T>
但没有 Base<T>
作为直接超类(即更长的类型层次结构)。如果你不这样做,那就更简单了:
var matches = someAssembly.GetTypes().Where(t => t.BaseType == baseType);