【问题标题】:Understanding some C# code了解一些 C# 代码
【发布时间】:2011-05-01 20:17:09
【问题描述】:

我只阅读了这个站点上的一个主题,我看到了一些我无法理解的不寻常的类定义。谁能解释一下这个定义是什么意思?

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

【问题讨论】:

标签: c# oop data-structures


【解决方案1】:

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

它本质上意味着,当你创建一个 Node 实例时,你可以这样做

new Node<String>(someStringVar)

但你做不到

new Node<int>(someIntVar)

【讨论】:

  • 非常感谢您的帮助:)
【解决方案2】:

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

【讨论】:

    【解决方案3】:

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

    【讨论】:

      【解决方案4】:

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

      【讨论】:

        【解决方案5】:

        这叫做泛型

        where T : class
        

        表示你提供的类型必须是类,不能使用原始类型。 (例如 )

        这定义了一个名为Next 的对象,类型为Node&lt;T&gt;。如果在创建此类的实例时提供了 Size 类型,则意味着该属性将为 Node&lt;Size&gt;

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

        还有这个:

        public T Value { get; set; }
        

        一样
        public Size Value { get; set; }
        

        See generics on MSDN

        【讨论】:

        • 非常感谢您,这是一个非常好的评论。
        • @Californicated 投票的行为已经意味着thanks :P 如果有的话,请确保接受回答您问题的答案。使用投票选项下的支票()。
        【解决方案6】:

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

        【讨论】:

        • 非常感谢这篇文章真的很有帮助。:)。
        【解决方案7】:

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2014-11-26
          • 2012-04-07
          • 2015-11-07
          • 1970-01-01
          • 1970-01-01
          • 2011-09-25
          相关资源
          最近更新 更多