我有一个自定义控件和一些从它派生的控件。 我需要获取当前程序集中从主类派生的所有类并检查它们的属性。 如何做到这一点?
答案 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行以保存滚动)