Classes;
public abstract class BaseTest
{
public abstract string SaySomething();
}
public class Test1 : BaseTest
{
public override string SaySomething()
{
return "Hello from Test1";
}
}
public class Test2 : BaseTest
{
public override string SaySomething()
{
return "Hello from Test2";
}
}
public class Test3 : BaseTest
{
public override string SaySomething()
{
return "Hello from Test3";
}
}
Code;
List<BaseTest> myClasses = new List<BaseTest>();
var myTypes = AppDomain.CurrentDomain.GetAssemblies().SelectMany(a => a.GetTypes()).Where(t => t.IsSubclassOf(typeof(BaseTest)));
foreach (Type t in myTypes)
{
myClasses.Add((BaseTest)Activator.CreateInstance(t));
}
foreach (BaseTest bt in myClasses)
{
Console.WriteLine("Type is " + bt.GetType().FullName);
Console.WriteLine(bt.SaySomething());
}
Output
Type is ConsoleApplication1.Test1
Hello from Test1
Type is ConsoleApplication1.Test2
Hello from Test2
Type is ConsoleApplication1.Test3
Hello from Test3