私のコードでは、後でそれぞれの派生型にキャストするベースクーラス付きのリストを使用しています。私は、ベースクラスのコンストラクタを作成して、それをどのような型にし、その型に変更するのかを考え出すことができると考えました。コンストラクタでオブジェクトタイプを変更する
public class BaseClass
{
// Constructor
BaseClass(string Input)
{
if (Input.Substring(0, 5) == "Something")
return new DerivedClass(); // <-- Not allowed
}
}
public class DerivedClass : BaseClass
{
}
コンストラクタがvoidを返す必要があるため、これは許可されていません。 "this"のタイプの変更は許可されていないようです。私は、このコードには非常に単純な代替案があることを知っていますが、それはある種の優雅さを持っていると思います。
他に何かを構築するコンストラクタは、エレガントであるべきですか? –
あなたはC#のコンストラクタから何も返すことはできません。 'new'の結果は、常にその型の具体的なインスタンスです。これを行うには、工場を使う必要があります。ファクトリは、作成する派生型とそれを返す派生型を決定する単なる関数です。 –
うわー、あなたはすごいです!私の要点は、これをコード化する方法を探すのではなく、言語そのものに関する議論である。私はこのアプローチを直感的に見つける唯一の人ですか? – RagnarDa