1

我的代码使用了一个带有基类的列表,我稍后将其转换为它们各自的派生类型。我达到了一个点,我认为我可以为基类创建一个构造函数,该构造函数将确定它应该是什么类型并将其自身更改为该类型。像这样的东西:

    public class BaseClass
    {
        // Constructor
        BaseClass(string Input)
        {
            if (Input.Substring(0, 5) == "Something")
                return new DerivedClass(); // <-- Not allowed
        }
    }
    public class DerivedClass : BaseClass
    {
    }

这是不允许的,因为构造函数必须返回 void。似乎也不允许更改“this”的类型。我知道这个代码有非常简单的替代方案,但我认为它有一定的优雅,你不觉得吗?

4

2 回答 2

7

您应该研究工厂模式。当您想要创建对象的实例但允许根据其他参数确定特定类型时使用它。

public static class BaseClassFactory
{
    public static BaseClass Create(string input)
    {
        if (input.Substring(0, 5) == "Something")
            return new DerivedClass();

        return new BaseClass();
    }
}
于 2012-04-25T21:51:57.163 回答
3

我也推荐工厂模式,但写的不同。这可以防止创建 BaseClass new,因此获取类的唯一选择是通过该Create方法。

public class BaseClass
{
  private BaseClass()
  {
  }

  public static BaseClass Create(string input)
  {
    if (input.Substring(0, 5) == "Something")
      return new DerivedClass();

    return new BaseClass();
  }
}
于 2012-04-25T21:58:24.387 回答