C#,T中的通用约束与TSomethingElse相同,对吧?

时间:2011-05-15 16:29:16

标签: c# generics

我经常看到:

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

在这种情况下,TWidget与使用通用T相同,对吗?我发现这个令人惊讶的难以谷歌或在规格中找到。我99%确定T +任何其他角色与只说T相同,但我想绝对肯定。

4 个答案:

答案 0 :(得分:5)

generic type parameter的名称可以是任何有效的标识符名称。

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

来自MSDN:

  

使用描述性名称命名泛型类型参数,除非单个字母名称完全是自解释的,并且描述性名称不会增加值。

答案 1 :(得分:1)

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

答案 2 :(得分:1)

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

当泛型类型存在约束时,您通常会看到更多描述性名称,通常表示约束可能是什么。当你有多个泛型类型参数时,拥有一个更长的标识符也很有帮助,这样你就可以很容易地记住哪一个是哪个。

答案 3 :(得分:0)

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

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

但你可以轻松使用public interface IFoo<Banana, Spiggot>。这真的没关系