了解一些C#代码

时间:2011-05-01 20:17:10

标签: c# oop data-structures

我只是在这个网站上阅读其中一个帖子而且我看到了一些我不能理解的不寻常的类定义。有人可以解释一下这个定义的含义吗?

public class Node<T> where T : class
{     
  public Node<T> Next { get; set; }    
  public T Value { get; set; }     
  public Node(T value)     
  { 
    Next = null;
    Value = value;    
  } 
} 

特别是在它说

的地方
public class Node<T> where T : class

7 个答案:

答案 0 :(得分:6)

它是一个泛型类定义,带有泛型参数T,其约束条件必须是T(引用类型)。

它实质上意味着,当您创建Node实例时,您可以执行

new Node<String>(someStringVar)

但你做不到

new Node<int>(someIntVar)

答案 1 :(得分:3)

它将Node定义为generic class,其中T泛型类型constrained仅用于引用类型。

答案 2 :(得分:3)

where T : class表示T不能是struct类型(包括int等原始类型。)

答案 3 :(得分:1)

看起来你有一个链表节点,其中节点可以属于任何类。 T是泛型的说明符,其中T:class部分指定泛型的条件。在这种情况下,T必须是一个类。

答案 4 :(得分:1)

这称为泛型

where T : class

表示您提供的类型必须是类,不能使用基元类型。 (例如&lt; int&gt;)

这是定义名为Next的{​​{1}}类型的对象。如果在创建此类的实例时提供了类型Node<T>,则表示此属性为Size

Node<Size>

而且:

public Node<T> Next { get; set; }

相同
public T Value { get; set; }

<强> See generics on MSDN

答案 5 :(得分:1)

括号内的T是泛型类型参数。我建议你阅读the introduction on genericity来解释它的优点和需求。

答案 6 :(得分:0)

T是泛型类型参数。该定义指定了一个约束,其中T只能是class,而不是struct