Понимание кода на C # - PullRequest
       2

Понимание кода на C #

3 голосов
/ 02 мая 2011

Я читал одну из веток только на этом сайте и увидел какое-то необычное определение класса, которое мне не удалось понять. Может кто-нибудь объяснить, что означает это определение?

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 ]

6 голосов
/ 02 мая 2011

Это определение общего класса с универсальным параметром T с ограничением, что T должен быть классом (ссылочным типом).

По сути, это означает, что когда вы создаете экземпляр Node, вы можете сделать

new Node<String>(someStringVar)

но вы не можете сделать

new Node<int>(someIntVar)
3 голосов
/ 02 мая 2011

where T : class означает, что T не может быть типом struct (включая такие примитивные типы, как int).

3 голосов
/ 02 мая 2011

Он определяет Node как универсальный класс , где универсальный тип T равен , ограничен только для ссылочных типов.

1 голос
/ 02 мая 2011

T в скобках - это параметр общего типа. Я предлагаю вам прочитать введение в обобщение для объяснения его преимуществ и потребностей.

1 голос
/ 02 мая 2011

Это называется generics

where T : class

означает, что тип, который вы предоставляете, должен быть классом, вы не можете использовать примитивные типы.(например, )

Это определение объекта с именем Next типа Node<T>.Если при создании экземпляра этого класса указан тип Size, это означает, что это свойство будет Node<Size>.

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

. И это:

public T Value { get; set; }

будет таким жекак

public Size Value { get; set; }

См. обобщения на MSDN

1 голос
/ 02 мая 2011

Похоже, у вас есть узел связанного списка, где узел может быть любого класса.T является спецификатором для универсального, а часть где T: class определяет условия для универсального.В этом случае T должен быть классом.

0 голосов
/ 02 мая 2011

T - аргумент универсального типа.Определение задает ограничение, в котором T может быть только class, а не struct.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...