Следующий фрагмент кода (C #) создает экземпляр любых конкретных классов, полученных из Base
, найденных в библиотеках классов (* .dll) в пути приложения, и сохраняет их в списке.
using System.IO;
using System.Reflection;
List<Base> objects = new List<Base>();
DirectoryInfo dir = new DirectoryInfo(Application.StartupPath);
foreach (FileInfo file in dir.GetFiles("*.dll"))
{
Assembly assembly = Assembly.LoadFrom(file.FullName);
foreach (Type type in assembly.GetTypes())
{
if (type.IsSubclassOf(typeof(Base)) && type.IsAbstract == false)
{
Base b = type.InvokeMember(null,
BindingFlags.CreateInstance,
null, null, null) as Base;
objects.Add(b);
}
}
}
Редактировать: Классы, на которые ссылается Matt , вероятно, являются лучшим вариантом в .NET 3.5.