.NET:获取从特定类派生的所有类

时间:2011-02-18 18:48:05

标签: .net oop reflection inheritance attributes

我有一个自定义控件和一些从它派生的控件。 我需要获取当前程序集中从主类派生的所有类并检查它们的属性。 如何做到这一点?

3 个答案:

答案 0 :(得分:12)

var type = typeof(MainClass);

var listOfDerivedClasses = Assembly.GetExecutingAssembly()
    .GetTypes()
    .Where(x => x.IsSubclassOf(type))
    .ToList();

foreach (var derived in listOfDerivedClasses)
{
   var attributes = derived.GetCustomAttributes(typeof(TheAttribute), true);

   // etc.
}

答案 1 :(得分:1)

您可以使用反射:

Type baseType = ...
var descendantTypes =
    from type in baseType.Assembly.GetTypes()
    where !type.IsAbstract
       && type.IsSubclassOf(baseType)
       && type.IsDefined(typeof(TheCustomAttributeYouRequire), true)
    select type;

你可以从那里去。

答案 2 :(得分:0)

为了找到一个类的派生词,它们都在另一个程序集中定义(GetExecutingAssembly没有工作),我使用了:

var asm = Assembly.GetAssembly(typeof(MyClass));
var listOfClasses = asm.GetTypes().Where(x => x.IsSubclassOf(typeof(MyClass)));

(分割超过2行以保存滚动)