通用接口重载.有效的术语?

dar*_*key 12 c# overloading terminology generic-interface

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

int MyMethod(int a)
int MyMethod(int a, string b)
Run Code Online (Sandbox Code Playgroud)

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

IMyInterface<T>
IMyInterface<T1,T2>
Run Code Online (Sandbox Code Playgroud)

我可以说这代表"通用接口重载"吗?或者"重载"术语是否仅适用于此类背景下的方法?它仍然看起来与方法重载非常相似,因为我们保持一个完全相同的名称,但改变参数.

如果我不能说"通用接口过载/重载"我可以说这两个不同的接口共享相同的名称?

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

Oli*_*bes 10

具有相同名称但具有不同数量的泛型类型参数(包括零)的类型只是不同的类型."重载"一词在此不适用.重载实际上仅适用于属于相同类型且具有相同名称但签名不同的方法.


具有相同名称的通用接口和非通用接口是非常常见的(例如来自.NET库):

public interface IList : ICollection, IEnumerable

public interface IList<T> : ICollection<T>, IEnumerable<T>, IEnumerable
Run Code Online (Sandbox Code Playgroud)

它们被称为通用和非通用.


泛型类型的.NET名称是以重音符号(`)结尾的类型名称和类型参数的数量.例如IMyType<T>,C#或IMyType(Of T)VB中的类型被转换为

IMyType`1

内部.该<T>是真的只是这是翻译由CLR使用的内部.NET名称的C#语法结构.

IMyType<T,U> 将被翻译成

IMyType`2

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