c# - 通用接口(interface)重载。有效术语?

标签 c# overloading terminology generic-interface

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

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

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

IMyInterface<T>
IMyInterface<T1,T2>

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

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

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

最佳答案

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


拥有同名的通用接口(interface)和非通用接口(interface)是很常见的(来自 .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-) 现实类型中具有不同的名称。

关于c# - 通用接口(interface)重载。有效术语?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13944271/

相关文章:

c# - Asp.NET MVC 和 Azure 存储

c# - 如何在 C# 中执行 cmd,然后在同一窗口中执行另一个命令?

c++ - 如何从 C 宏调用 C++ 重载函数

matlab - 在 MATLAB 中重载函数

php - 什么是 "real"编程语言?

http - HTTP 是什么样的?

marshalling - 什么是对象编码?

c# - 在 NavigationItem.TitleView 中缩放图像以适应 UINavigationBar 的内部

c# - java注释与C#属性相同吗? C++ 中的等价物是什么?

c++ - 在 C++ 中为 Date 类重载 >> 运算符会导致无限循环