C#中的泛型约束,T是相同的,对吧

本文关键字:对吧 泛型 约束 | 更新日期: 2023-09-27 17:56:24

我经常看到:

public interface IFoo<TWidget> where TWidget : ISomethingElse { }

在这种情况下,TWidget与使用通用T相同,对吗?我发现这很难在谷歌上搜索或在规格中找到。我 99% 确定 T + 任何其他字符都与只说 T 相同,但希望绝对确定。

C#中的泛型约束,T是相同的,对吧

型类型参数的名称可以采用任何有效的标识符名称。

在大多数文档中,您确实会找到T放置TWidget的位置。

从 MSDN:

使用描述性名称

命名泛型类型参数,除非单个字母名称完全不言自明,并且描述性名称不会增加价值。

在这种情况下,TWidget是通用的,但不是因为它是T+的东西。尽管建议将其命名为 T+something,但它可以是您想要的任何内容,只要它在语法上正确类型标识符名称即可。

正如您所怀疑的那样,将任何标识符放在您通常看到T的地方是完全合法的。

当对泛型类型施加约束时,您通常会看到更具描述性的名称,通常指示约束可能是什么。当您有多个泛型类型参数时,使用较长的标识符也很有帮助,这样您就可以轻松记住哪个是哪个。

Type 参数可以是任何名称,但标准方法是使用 T,然后遍历字母表,因为需要更多泛型类型。

所以你可能有public interface IFoo<T, U> where T : ISomethingElse { }

但是您也可以同样轻松地使用public interface IFoo<Banana, Spiggot>.真的没关系