私のコードは、後でそれぞれの派生型にキャストするベースクラスのリストを使用しています。基本クラスのコンストラクターを作成して、それがどのタイプであるかを判断し、それ自体をそのタイプに変更できると思ったところに到達しました。このようなもの:
public class BaseClass
{
// Constructor
BaseClass(string Input)
{
if (Input.Substring(0, 5) == "Something")
return new DerivedClass(); // <-- Not allowed
}
}
public class DerivedClass : BaseClass
{
}
コンストラクターはvoidを返す必要があるため、これは許可されていません。「これ」の種類の変更も許可されていないようです。このコードには非常に単純な代替手段が機能することは知っていますが、ある程度の優雅さがあると思いますね。