12

これは、メソッドのオーバーロードの非常に基本的な例です。同じ名前で署名が異なる2つのメソッドです。

int MyMethod(int a)
int MyMethod(int a, string b)

ここで、まったく同じ名前を共有しているが、次のような型パラメーターの数が異なる2つのジェネリックインターフェイスを定義するとします。

IMyInterface<T>
IMyInterface<T1,T2>

これは「一般的なインターフェイスのオーバーロード」を表していると言えますか?または、「オーバーロード」という用語は、そのようなコンテキストのメソッドにのみ適用されますか?それでも、まったく同じ名前を維持しながらパラメーターを変更するという意味で、メソッドのオーバーロードと非常によく似ています。

「ジェネリックインターフェイスのオーバーロード/オーバーロード」と言えない場合、同じ名前を共有するこれら2つの異なるインターフェイスについて何が言えますか?

これがばかげた質問である場合は感謝し、申し訳ありませんが、「ジェネリックインターフェイスのオーバーロード」または「ジェネリックインターフェイスのオーバーロード」をグーグルで検索しても、インターフェイスメソッドのオーバーロードに関する結果は得られません。これは、私が興味を持っていることではありません。

4

1 に答える 1

10

同じ名前でジェネリック型パラメーターの数が異なる(ゼロを含む)型は、単に異なる型です。「オーバーロード」という用語は、ここでは適用されません。オーバーロードは、実際には、同じタイプに属し、同じ名前で異なるシグネチャを持つメソッドにのみ適用されます。


同じ名前のジェネリックインターフェイスと非ジェネリックインターフェイスを使用することは非常に一般的です(.NETライブラリの例)。

public interface IList : ICollection, IEnumerable

public interface IList<T> : ICollection<T>, IEnumerable<T>, IEnumerable

それらは単にジェネリックおよび非ジェネリックと呼ばれます。


ジェネリック型の.NET名は、アクサングラーブ( `)で終わる型の名前と型パラメーターの数です。たとえばIMyType<T>、C#またはIMyType(Of T)VBのタイプは次のように変換されます

IMyType`1

初めの。これ<T>は実際には、CLRで使用される内部.NET名に変換される単なるC#構文構造です。

IMyType<T,U>に翻訳されます

IMyType`2

これは、ジェネリック型パラメーターの数だけが異なるC#の同じ名前の型が、異なる名前の(CLR-)現実型にあることを明確に示しています。

于 2012-12-19T02:12:41.187 に答える