Ste*_*ins 5 c# static-methods derived-class
在C#程序中,我有一个带有静态"Create"方法的抽象基类.Create方法用于创建类的实例并将其存储在本地以供以后使用.由于基类是抽象的,因此实现对象总是从它派生.
我希望能够从基类派生一个对象,通过派生类调用静态Create方法(在基类中实现一次),并创建派生对象的实例.
C#语言中是否有任何设施可以让我解决这个问题.我当前的后备位置是将派生类的实例作为Create函数的参数之一传递,即:
objDerived.Create(new objDerived(), "Arg1", "Arg2");
Run Code Online (Sandbox Code Playgroud)
chi*_*emp 12
尝试使用泛型:
public static BaseClass Create<T>() where T : BaseClass, new()
{
T newVar = new T();
// Do something with newVar
return T;
}
Run Code Online (Sandbox Code Playgroud)
样品用途:
DerivedClass d = BaseClass.Create<DerivedClass>();
Run Code Online (Sandbox Code Playgroud)
有两个主要选择.更好更新的是使用泛型,另一种是使用反射.我提供这两个以防你需要开发一个在.NET 2.0之前工作的解决方案.
abstract class BaseClass
{
public static BaseClass Create<T>() where T : BaseClass, new()
{
return new T();
}
}
Run Code Online (Sandbox Code Playgroud)
用法如下:
DerivedClass derivedInstance = BaseClass.Create<DerivedClass>();
Run Code Online (Sandbox Code Playgroud)
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);
}
}
Run Code Online (Sandbox Code Playgroud)
使用的位置(为了便于阅读,分为两行):
DerivedClass derivedClass
= (DerivedClass)BaseClass.Create(typeof(DerivedClass));
Run Code Online (Sandbox Code Playgroud)