2

我正在阅读msdn上的泛型

我们可以使用如下定义简单的泛型类T for type

class Generics<T> 
    {
        List<T> list = new List<T>();
        public void fun(T no1, T no2)
        {
            list.Add(no1);
        }
    }

然后我尝试使用不同的变量作为类型,例如X for type如下,它起作用了

class Generics<X> 
    {
        List<X> list = new List<X>();
        public void fun(X no1, X no2)
        {
            list.Add(no1);
        }
    }

很想知道为什么 C# 允许我们使用任何类型的变量以及这种方法的优势是什么

4

5 回答 5

10

它不是变量,只是泛型类型的别名,只是为了使代码更具可读性。看一看Dictionary<TKey, TValue>——它比想象的要清楚得多Dictionary<T, X>

于 2013-06-20T13:03:46.553 回答
3

这是使用的约定T

T对于类型。

您可以使用TOutorTIn如果它更好地描述了您的意图,或者TWhatever.

在此处此处查看有关泛型命名约定的更多信息。

搜索?q=泛型+命名+约定

于 2013-06-20T13:04:59.873 回答
2

使用变量的原因是可以有多个变量(类型),并且它们之间的区别是命名的。

于 2013-06-20T13:04:41.810 回答
0

泛型参数需要有个名字,否则不能引用。例如,你还能怎么写你的 fun(T no1, T no2) 方法?您不能使用实际类的名称(因为您还不知道它是什么 - 这就是您使用泛型的原因!),但是您需要以某种方式引用它,因此您分配的名称指未知类,在本例中为 T。

至于为什么经常使用T,只是一个约定——T代表(t)ype。你可以使用任何你想要的东西。很多时候,当一个类有多个泛型参数时,您会看到它们例如 GenericClass<T, U, V> 并且这只是基于从 T 中按字母顺序进行的约定。通常您会看到更有意义的名称,例如可以将通用字典类定义为 Dictionary<TKey, TValue> 以更清楚地了解类型的用途。

于 2013-06-20T13:12:39.197 回答
0

T 或 X 只是“类型”变量的表示,你可以使用其他的,只要不存在名为 T 或 X 的已知类型。

于 2013-06-20T13:12:55.557 回答