2017-06-16 7 views
2

ジェネリックListリターンタイプでデリゲートを定義する必要があります。これを達成する方法はあり一般的な返り値を持つC#代理人Typのリスト

List<MyClass1> Method1(string arg1, string arg2) 
List<MyClass2> Method2(string arg1, string arg2) 

delegate List<T> TestDelegate(string arg1, string arg2); 

それから私は、方法1と方法2のこの

TestDelegate td = new TestDelegate(Method1); 

またはこの

TestDelegate td = new TestDelegate(Method2); 

署名をしたいですか?

答えて

0

あなたは、デリゲート自体は一般的なことができます:

delegate List<T> TestDelegate<T>(string arg1, string arg2); 

var td1 = new TestDelegate<MyClass1>(Method1); 
var td2 = new TestDelegate<MyClass2>(Method2); 

は、デリゲートの宣言に追加<T>に注意してください。

1

あなたは抽象クラスを定義することができます

public abstract class MyClass{ 
    public String GenericProperty{get;set;} 
} 

、あなたの特定のクラス:

public MyClass1 : MyClass { 
    public String SpecificProperty{get; set;} 
} 
public MyClass2 : MyClass { 
    public String OtherSpecificProperty{get; set;} 
} 

その後、デリゲートは、次のようになります。

delegate List<MyClass> TestDelegate(string arg1, string arg2); 
List<MyClass> Method1(string arg1, string arg2) 
List<MyClass> Method2(string arg1, string arg2) 

List<MyClass> = new TestDelegate(Method1); 
List<MyClass> = new TestDelegate(Method2); 
+0

一覧 '以来、動作しません'を'List 'のスーパータイプではありません(試してみてください)、コンパイルエラーが発生します。 'List 'は共変ではありません: 'Method1'によって返された値に対して' returnValue.Add(new MyClass2()) 'を実行した場合に起こることを想像してみてください。 – Heinzi

関連する問題