2017-10-24 6 views
3

タイプInterfaceExecuterは、入力タイプと終了タイプで定義されていますが、どちらも構造体です。別のクラスで は、私は私のインターフェイスを実装する方法のウィッヒのインスタンス化クラスを作成したい、このような何か:サブジェネリックタイプの汎用ファクトリメソッド

public T<TEntry, TExit> Initiate<T<TEntry, TExit>>() 
     where T: InterfaceExecuter<TEntry, TExit>, new() 
     where TEntry:struct 
     where TExit:struct 
    { 
     return new T<TEntry, TExit>(); 
    } 

私はそれをどのように行うことができますか?

答えて

7

ほとんどの場合、戻り値タイプ(T)を汎用引数として定義してください。あなたはまだあなたがそれをインスタンス化する場合、明示的に一般的な引数を使用する必要はありませんジェネリック型Tの構造を定義したT: InterfaceExecuter<TEntry, TExit>このconstraingで

public T Initiate<T, TEntry, TExit>() 
      where T: InterfaceExecuter<TEntry, TExit>, new() 
      where TEntry:struct 
      where TExit:struct 
     { 
      return new T(); 
     } 
(コンパイラもそれを許可しません)
+0

よろしいですか!しかし、私はこのようなメソッドを呼び出す必要がありますか? this.Initiate 、T1、T2>()これらのケースでは、struct型を2回、ConcreteExecutorに1回、Initiateメソッドに1回渡す必要があります。それが正しいか? –

+1

はい、両方の場所でTEntryとTExitを提供する必要があります。 –

関連する問題