0

外部に拡張したい Generic クラスがあります。

のクラス内にいた場合MyGenericClass<T>、次のようなメソッドを単純に定義できます。

public MyReturnType MyMethod() 
{ 
    MyReturnType m; 
    //some code
    return m;
}

これは、通常どおり、インスタンスによって呼び出すことができます。myGenericClass.MyMethod();

しかし、拡張機能を使ってこの機能を外部から追加したい。

以下はコンパイルされません。

public static MyReturnType MyMethod(this MyGenericClass<T> mgc)
{
    MyReturnType m; 
    //some code
    return m;
}

型 T は推論できないためです。

以下はコンパイルします:

public static MyReturnType MyMethod<T>(this MyGenericClass<T> mgc)
{
    MyReturnType m; 
    //some code
    return m;
}

ただし、これには入力が必要でmyGenericClass.MyMethod<MyT>();あり、さらに悪いことに、MyMethod の "T" が MyGenericClass の "T" と同じになるという制約はありません。2 つのジェネリックは独立しています (ユーザーが両方のクラスに同じ型を使用することに依存しています)。および機能)。

これを正しく宣言するにはどうすればよいですか?

ありがとうハイストロム

4

1 に答える 1

5

あなたの最後の定義は正しいものです。メソッド宣言と型パラメーターの両方で使用するという事実はT、型が両方の場合で同じになるように制約されることを意味します (つまり、型を交差させることはできません)。

于 2013-07-16T14:52:34.773 に答える