我的代码使用了一个带有基类的列表,我后来将它们转换为各自的派生类型.我达到了一个点,我认为我可以为基类创建一个构造函数,它将找出它应该是什么类型并将其自身更改为该类型.像这样的东西:
public class BaseClass
{
// Constructor
BaseClass(string Input)
{
if (Input.Substring(0, 5) == "Something")
return new DerivedClass(); // <-- Not allowed
}
}
public class DerivedClass : BaseClass
{
}
Run Code Online (Sandbox Code Playgroud)
这是不允许的,因为构造函数必须返回void.似乎也不允许改变"this"的类型.我知道这个代码有很简单的替代方法可行,但我认为它有一定的优雅,你不觉得吗?
您应该查看工厂模式.当您要创建对象的实例但允许基于其他参数确定特定类型时,可以使用它.
public static class BaseClassFactory
{
public static BaseClass Create(string input)
{
if (input.Substring(0, 5) == "Something")
return new DerivedClass();
return new BaseClass();
}
}
Run Code Online (Sandbox Code Playgroud)