【发布时间】:2008-11-21 15:14:37
【问题描述】:
我想查找从基/接口继承的所有类型。任何人都有一个很好的方法来做到这一点?想法?
我知道这是一个奇怪的请求,但我一直在玩它。
【问题讨论】:
标签: c# reflection
我想查找从基/接口继承的所有类型。任何人都有一个很好的方法来做到这一点?想法?
我知道这是一个奇怪的请求,但我一直在玩它。
【问题讨论】:
标签: c# reflection
使用 Assembly.GetTypes() 获取所有类型,使用 Type.IsAssignableFrom() 检查继承。如果您需要代码,请告诉我 - 以及您是否使用 .NET 3.5。 (很多像这样的反射任务使用 LINQ to Objects 更简单。)
编辑:根据要求,这是一个示例 - 它在实现 IEnumerable 的 mscorlib 中找到所有内容。请注意,当基类型是泛型时,生活会有些困难......
using System;
using System.Collections;
using System.Linq;
using System.Reflection;
class Test
{
static void Main()
{
Assembly assembly = typeof(string).Assembly;
Type target = typeof(IEnumerable);
var types = assembly.GetTypes()
.Where(type => target.IsAssignableFrom(type));
foreach (Type type in types)
{
Console.WriteLine(type.Name);
}
}
}
【讨论】:
var a = Assembly.Load("My.Assembly");
foreach (var t in a.GetTypes().Where(t => t is IMyInterface))
{
// there you have it
}
【讨论】:
或者对于基类的子类:
var a = Assembly.Load("My.Assembly");
foreach (var t in a.GetTypes().Where(t => t.IsSubClassOf(typeof(MyType)))
{
// there you have it
}
【讨论】: