1

私のコードは、後でそれぞれの派生型にキャストするベースクラスのリストを使用しています。基本クラスのコンストラクターを作成して、それがどのタイプであるかを判断し、それ自体をそのタイプに変更できると思ったところに到達しました。このようなもの:

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

コンストラクターはvoidを返す必要があるため、これは許可されていません。「これ」の種類の変更も許可されていないようです。このコードには非常に単純な代替手段が機能することは知っていますが、ある程度の優雅さがあると思いますね。

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 に答える