获取从基类派生的所有对象的集合
本文关键字:对象 集合 获取 基类 派生 | 更新日期: 2023-09-27 18:22:12
我有一个应用程序,它包含许多需要添加到报表中的页面。页面数量增长很快,所以我希望能够用它们动态地填充报告。下面的方法正确地返回了页面列表,但我无法将页面添加到报表中。
我得到参数1:无法从"System.Type"转换为"Reports.Pages.PageBase"如何更正?
private void AddAllPages()
{
var pages = FindSubClassesOf<PageBase>();
foreach (var pg in pages)
{
Report.Pages.Add(pg);
}
}
public IEnumerable<Type> FindSubClassesOf<TBaseType>()
{
var baseType = typeof(TBaseType);
var assembly = baseType.Assembly;
return assembly.GetTypes().Where(t => t.IsSubclassOf(baseType));
}
您想要创建每种类型的实例:
Activator.CreateInstance(type)
如果这些类型没有默认的构造函数,那么也需要传递构造函数参数。
使用反射发现派生类型
public static List<Type> FindAllDerivedTypes<T>()
{
return FindAllDerivedTypes<T>(Assembly.GetAssembly(typeof(T)));
}
public static List<Type> FindAllDerivedTypes<T>(Assembly assembly)
{
var derivedType = typeof(T);
return assembly
.GetTypes()
.Where(t =>
t != derivedType &&
derivedType.IsAssignableFrom(t)
).ToList();
}