12

这是一个非常基本的方法重载示例,两个方法名称相同但签名不同:

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

现在假设我定义了两个通用接口,共享完全相同的名称但类型参数数量不同,例如:

IMyInterface<T>
IMyInterface<T1,T2>

我可以说这代表“通用接口重载”吗?还是“重载”术语仅适用于这种情况下的方法?它看起来仍然与方法重载非常相似,因为我们保持完全相同的名称但改变了参数。

如果我不能说“通用接口重载/重载”,对于这两个共享相同名称的不同接口我能说什么?

谢谢和抱歉,如果这是一个愚蠢的问题,但是谷歌搜索“通用接口重载”或“通用接口重载”并没有给我太多,而是关于接口方法重载的结果,这不是我感兴趣的。

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>实际上只是一个 C# 语法结构,它被转换为 CLR 使用的内部 .NET 名称。

IMyType<T,U>将被翻译成

IMyType`2

这清楚地表明,在 C# 中具有相同名称的类型仅在其泛型类型参数的数量上有所不同,它们位于具有不同名称的 (CLR-) 现实类型中。

于 2012-12-19T02:12:41.187 回答