C#でジェネリックスに少し苦労しています。コードのこの部分を考えてみましょう:一般的な派生型のオブジェクトを返す汎用メソッド
public interface A {};
public interface B : A {};
public interface C : A {};
public interface IMyInterface<in T> where T : A {};
public class FirstImpl<T> : IMyInterface<T> where T : B {};
public class SecondImpl<T> : IMyInterface<T> where T : C {};
は、今私は種類を取り、正しい実装を返すいくつかの工場、する必要があります。
public IMyInterface<T> Create<T>() where T : A
{
if(typeof(T) is B) {
return new FirstImpl<T>();
}
if(typeof(T) is C) {
return new SecondImpl<T>();
}
}
これは2つのレベルでは動作しません。最初のものはリターンタイプです。第2の方法は、より具体的な型が必要なため、第1または第2の実装に "T"を渡すことができないということです。どのようにこれを解決するための任意のアイデア?
「新しいFirstImpl();」を呼び出すときに、技術的に問題があります。ここでコンパイラは実際にジェネリック型TがBまたはB派生であると納得させることはできません。面白い。思考の糧。 Lemme参照してください。 –
いくつかの 'new'キーワードを削除しましたか?あなたが望むことをしたとしてもコンパイルできないコードを扱わなくても、この質問を理解するのは難しいです。 'return new FirstImpl();'と 'return new SecondImpl ();'を書きますか? –
今修正されました。 –