Rob*_*son 4 .net c# reflection
这就是我所拥有的.
BaseClass<T>
{
}
MyClass
{
}
NewClass : BaseClass<MyClass>
{
}
Run Code Online (Sandbox Code Playgroud)
我需要查看是否有一个类使用MyClass的特定泛型实现来实现BaseClass并获取该类的类型.在这种情况下,它将是NewClass
编辑
AppDomain.CurrentDomain.GetAssemblies().SelectMany(s => s.GetTypes()).Where(
typeof(BaseClass<>).MakeGenericType(typeof(MyClass)).IsAssignableFrom);
Run Code Online (Sandbox Code Playgroud)
这将返回实现BaseClass <MyClass>的所有类型的列表.
谢谢
如果您有types要测试的类型(被调用)列表,则可以使用IsAssignableFrom方法获取从指定基类继承的所有类型:
var baseType = typeof(BaseClass<MyClass>);
var info = types.Where(t => baseType.IsAssignableFrom(t)).FirstOrDefault();
if (info != null)
// We have some type 'info' which matches your requirements
Run Code Online (Sandbox Code Playgroud)
如果您只有MyClass类型的运行时信息,那么您可以baseType这样:
Type myClassInfo = // get runtime info about MyClass
var baseTypeGeneric = typeof(BaseClass<>);
var baseType = baseTypeGeneric.MakeGenericType(myClassInfo);
Run Code Online (Sandbox Code Playgroud)
您写道,您需要以某种方式找到该类,所以最后一个问题是如何获取列表types.要做到这一点,您需要搜索一些程序集 - 您可以从当前正在执行的程序集开始(如果类型在您的应用程序中),或者使用名称标识的一些众所周知的程序集.
// Get all types from the currently running assembly
var types = Assembly.GetExecutingAssembly().GetTypes();
Run Code Online (Sandbox Code Playgroud)
不幸的是,没有办法"神奇地"找到这样的类型 - 你需要搜索所有可用的类型,这可能是相当昂贵的操作.但是,如果您只需要执行一次此操作(例如,当应用程序启动时),您应该没问题.
| 归档时间: |
|
| 查看次数: |
2361 次 |
| 最近记录: |