2011-05-01 87 views
3

我正在阅读本网站上的一个主题,我看到了一些不同寻常的类定义,我无法理解这一点。有人可以解释一下这个定义是什么意思吗?了解一些C#代码

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 
+0

[Generic Type Constraint](http://msdn.microsoft.com/en-us/library/d5x73970.aspx) – ChaosPandion 2011-05-01 20:19:44

+0

[C#where keyword](http:// stackoverflow。com/questions/2774041/c-where-keyword) – ChaosPandion 2011-05-01 20:24:38

回答

6

这是一个通用类定义与那T有被类(引用类型)约束的泛型参数T。

这基本上意味着,当你创建节点的实例,你可以做

new Node<String>(someStringVar) 

,但你不能做

new Node<int>(someIntVar) 
+0

非常感谢你的帮助:) – TeaLeave 2011-05-01 21:49:34

0

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

3

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

1

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

1

这就是所谓的仿制药

where T : class 

意味着您提供的类型必须是一个类,则无法使用基本类型。 (例如< int>)

这定义了一个名为Next的对象,其类型为Node<T>。如果在创建此类的实例时提供了类型Size,则表示此属性将为Node<Size>

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

这:

public T Value { get; set; } 

将是相同

public Size Value { get; set; } 

See generics on MSDN

+0

非常感谢你,这是一个很好的评论。 – TeaLeave 2011-05-01 21:50:16

+0

@Californicated投票的行为已经意味着'谢谢':P并确保接受回答你的问题,如果有的话。在投票选项下勾选('√')。 – BrunoLM 2011-05-01 21:55:13