【发布时间】:2011-06-30 00:57:03
【问题描述】:
我有一个自定义控件和许多从它派生的控件。 我需要获取当前程序集中从主类派生的所有类并检查它们的属性。 如何做到这一点?
【问题讨论】:
标签: .net oop reflection inheritance attributes
我有一个自定义控件和许多从它派生的控件。 我需要获取当前程序集中从主类派生的所有类并检查它们的属性。 如何做到这一点?
【问题讨论】:
标签: .net oop reflection inheritance attributes
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.
}
【讨论】:
你可以使用反射:
Type baseType = ...
var descendantTypes =
from type in baseType.Assembly.GetTypes()
where !type.IsAbstract
&& type.IsSubclassOf(baseType)
&& type.IsDefined(typeof(TheCustomAttributeYouRequire), true)
select type;
你可以从那里去。
【讨论】:
为了找到一个类的派生类,这些派生类都是在另一个程序集中定义的(GetExecutingAssembly 不起作用),我使用了:
var asm = Assembly.GetAssembly(typeof(MyClass));
var listOfClasses = asm.GetTypes().Where(x => x.IsSubclassOf(typeof(MyClass)));
(分成两行以节省滚动)
【讨论】: