我在解决方案中有2个项目。 Project1UI引用Project2Reports
Project1UI:
MainForm.cs
Project2Reports:
BaseReport.cs // all classes below inherit from it
Report1.cs
Report2.cs
Report3.cs
从Project1UI,我如何找到从BaseReport继承的所有类? project1UI已经引用了第二个程序集 - 有没有办法在不手动加载第二个程序集(例如Assembly.Load)的情况下执行它,因为它已经加载了。
答案 0 :(得分:1)
您必须处理程序集中的所有类型,并查找实现它的类型。
您可以使用类似的东西(现在手写,可能包含错误)。
foreach (Type type in Assembly.GetAssembly(typeof(BaseReport)).GetTypes())
{
if (type != typeof(BaseReport) && typeof(BaseReport).IsAssignableFrom(type))
{
// we found a type, we can store it somewhere, for example, in a list and our list in a static readonly field for fast lookup in the future.
myreports.Add(type);
}
}
您还可以处理所有已加载的装配体。
然而,这不是最好的方法,复杂,相当模糊,很难理解。 我会使用一个简单的工厂类,它会根据您的要求为您提供报告实例,当您添加报告时,通过简单的.Add调用添加它。