using System; public abstract class BaseClass { private string m_Name; protected BaseClass(string name) { m_Name = name; } public void Output() { Console.WriteLine("The class is: " + this.GetType()); Console.WriteLine("The name is: " + m_Name); } } public class DerivedA : BaseClass { public DerivedA(string name) : base(name) {} } public class DerivedB : BaseClass { public DerivedB(string name) : base(name) {} } public static class MyStaticClass { public static T Create(string name) where T : BaseClass { return (T)Activator.CreateInstance(typeof(T), new[] { name }); } } class Test { static void Main() { var a = MyStaticClass.Create("derived a"); var b = MyStaticClass.Create("derived b"); a.Output(); b.Output(); } }