概括
有两个主要选项。比较新的一种是使用泛型,另一种是使用反射。如果您需要开发适用于 .NET 2.0 之前的解决方案,我会同时提供这两种解决方案。
泛型
abstract class BaseClass
{
public static BaseClass Create<T>() where T : BaseClass, new()
{
return new T();
}
}
在哪里使用:
DerivedClass derivedInstance = BaseClass.Create<DerivedClass>();
反射
abstract class BaseClass
{
public static BaseClass Create(Type derivedType)
{
// Cast will throw at runtime if the created class
// doesn't derive from BaseClass.
return (BaseClass)Activator.CreateInstance(derivedType);
}
}
使用的地方(为了便于阅读,分成两行):
DerivedClass derivedClass
= (DerivedClass)BaseClass.Create(typeof(DerivedClass));