Fred Ochoa Ответов: 2

Я новичок в C#, является ли "public node next;" новым типом конструктора в классе ниже?


public class Node
{ 
  public Node next; 
  public Object data; 
}


Что я уже пробовал:

Пример кода, конечно, создает класс узла в отношении связанного списка.

Kevin Marois

"Public" - это модификатор доступа.

"Узел" - это ссылка на класс, в котором вы находитесь. Это означает, что этот класс будет иметь ссылку на себя под названием "next".

"next" - это переменная уровня класса, используемая для ссылки на экземпляр класса объекта Node.

Fred Ochoa

""Узел" - это ссылка на класс, в котором вы находитесь. Это означает, что этот класс будет иметь ссылку на себя под названием "next"."

Спасибо.

Я никогда не видел этого, как вы можете "ссылаться" на свое собственное имя класса как на тип данных? Это кажется круглым, и это не имеет смысла для меня. Я понимаю это только тогда, когда это конструктор. Но это не конструктор.

Kevin Marois

Есть некоторые ситуации, когда вам может понадобиться это сделать..

1) Паттерн Singleton. Видишь это http://csharpindepth.com/Articles/General/Singleton.aspx

2) иерархическая структура данных. Подумайте о дереве.

Погуглите оба из них для получения дополнительной информации.

Конструктор-это метод без возвращаемого типа, который имеет имя сохранения в качестве класса. Он используется для инициализации класса. Видишь это https://www.codeproject.com/Articles/7011/An-Intro-to-Constructors-in-C

Fred Ochoa

Ладно, Кевин, большое тебе спасибо, я посмотрю эти ссылки. Спасибо, что Вы тоже очень быстро ответили!!!

Kevin Marois

Без проблем. Удачи

2 Ответов

Рейтинг:
0

OriginalGriff

Нет.
Вы объявляете класс с именем Node:

public class Node
{ 
  ...
}
Внутри класса вы объявляете два поля:
public Node next; 
public Object data;
Оба поля объявляются как public это означает, что весь код вне класса может получить к ним доступ, а также код внутри класса.
Вы не объявили конструктор для класса, А это означает, что будет использоваться пустой конструктор по умолчанию.

Тип первого из них-узел, что означает, что он может ссылаться на другой экземпляр узла, что и нужно для построения связанного списка: каждый узел содержит ссылку на следующий узел в цепочке.

Здесь есть пара плохих идей: next и data должно начинаться с заглавной буквы и действительно должно быть свойствами, а не полями:
public class Node
{ 
  public Node Next {get; set;} 
  public object Data {get; set;} 
}
Вы не должны выставлять поля напрямую,вместо этого используйте свойства, когда можете.

Вы также не должны действительно использовать object чтобы содержать ваши данные, это усложняет код, когда вы хотите использовать узел, так как вам нужно проверить, что это за данные, и привести их к соответствующему типу, прежде чем вы сможете их использовать. Гораздо лучше использовать определенный тип данных, соответствующий данным, которые вы собираетесь хранить в узле, например int, string, или класс вашей конструкции.


Fred Ochoa

Хорошо, спасибо вам обоим, Бернхард и OriginalGriff, это было очень информативно. Теперь я получаю гораздо лучшее понимание.

OriginalGriff

Пожалуйста!

Рейтинг:
0

Bernhard Hiller

Нет, это не конструктор. Ваш класс скорее описывает какой-то" связанный список": Node содержит ссылку на следующее/Далее Node, таким образом, позволяя перемещаться по этому "списку". Object data является ли фактическое содержание Node.