2

オープンジェネリック型の vaiable を宣言する方法はありますか?

与えられた: ユーザーがファクトリ メソッドから取得するジェネリック クラス Logger があります。任意のロガーを保持できる変数を持つ方法はありますか?

現在、Logger は、ログに記録されている型を気にせずにインスタンスの変数を宣言できるという理由だけで、Logger から継承しています。

私は MEF を使用しており、エクスポートでは [Export(typeof(Logger<>))] のような構文を使用してジェネリック型をエクスポートできます... (インポート時に正確な型を指定する) ため、オープン型 (少なくとも typeof で)。今必要なのは次のような構文です

ロガー<> ロガー { get; 設定; }

そのようなことをする可能性はありますか?この特定の構文は、「必要なタイプ」を取得します。

4

1 に答える 1

2

ロガーの型パラメータが共変の場合、つまりout修飾子で宣言されている場合は、そのまま使用できますLogger<object>

IEnumerable<object> = new List<string>; // this works, because IEnumerable is covariant

Logger の型パラメーターが共変でない場合、つまり、どこかで入力パラメーターLog(T dataToLog)として使用する場合、たとえば、共通のインターフェイスを実装する (または共通の基本クラスを使用する) ことが、目標を達成する唯一の方法のようです。

于 2011-11-09T09:42:17.303 に答える