Теперь, когда вы понимаете роль типов перечислений, давайте посмотрим, как использовать структуры .NET Core. Типы структур хорошо подходят для моделирования в приложении математических, геометрических и других "атомарных" сущностей. Структура (такая как перечисление) — это определяемый пользователем тип; тем не менее, структура не является просто коллекцией пар "имя-значение". Взамен структуры представляют собой типы, которые могут содержать любое количество полей данных и членов, действующих на таких полях.

На заметку! Если вы имеете опыт объектно-ориентированного программирования, тогда можете считать структуры "легковесными типами классов", т.к. они предоставляют способ определения типа, который поддерживает инкапсуляцию, но не может использоваться для построения семейства взаимосвязанных типов. Когда возникает потребность в создании семейства типов, связанных отношением наследования, необходимо применять классы.

На первый взгляд процесс определения и использования структур выглядит простым, но, как часто бывает, самое сложное скрыто в деталях. Чтобы приступить к изучению основ типов структур, создайте новый проект по имени FunWithStructures. В языке C# структуры определяются с применением ключевого слова struct. Определите новую структуру по имени Point, представляющую точку, которая содержит две переменные типа int и набор методов для взаимодействия с ними:

struct Point

{

  // Поля структуры.

  public int X;

  public int Y;

  // Добавить 1 к позиции (X, Y).

  public void Increment()

  {

    X++; Y++;

  }

  // Вычесть 1 из позиции (X, Y).

  public void Decrement()

  {

    X--; Y--;

  }

  // Отобразить текущую позицию.

  public void Display()

  {

    Console.WriteLine("X = {0}, Y = {1}", X, Y);

  }

}

Здесь определены два целочисленных поля (X и Y) с использованием ключевого слова public, которое является модификатором управления доступом (их обсуждение будет продолжено в главе 5). Объявление данных с ключевым словом public обеспечивает вызывающему коду возможность прямого доступа к таким данным через переменную типа Point (посредством операции точки).

На заметку! Определение открытых данных внутри класса или структуры обычно считается плохим стилем программирования. Взамен рекомендуется определять закрытые данные, доступ и изменение которых производится с применением открытых свойств. Более подробные сведения приведены в главе 5.

Вот код, который позволяет протестировать тип Point:

Console.WriteLine("***** A First Look at Structures *****\n");

// Создать начальную переменную типа Point.

Point myPoint;

myPoint.X = 349;

myPoint.Y = 76;

myPoint.Display();

// Скорректировать значения X и Y.

myPoint.Increment();

myPoint.Display();

Console.ReadLine();

Вывод выглядит вполне ожидаемо:

***** A First Look at Structures *****

X = 349, Y = 76

X = 350, Y = 77

<p id="AutBody_Root173">Создание переменных типа структур</p>

Для создания переменной типа структуры на выбор доступно несколько вариантов. В следующем коде просто создается переменная типа Point и затем каждому ее открытому полю данных присваиваются значения до того, как обращаться к членам переменной. Если не присвоить значения открытым полям данных (X и Y в данном случае) перед использованием структуры, то компилятор сообщит об ошибке:

// Ошибка! Полю Y не присвоено значение.

Point p1;

p1.X = 10;

p1.Display();

// Все в порядке! Перед использованием значения присвоены обоим полям.

Point p2;

p2.X = 10;

p2.Y = 10;

p2.Display();

В качестве альтернативы переменные типа структур можно создавать с применением ключевого слова new языка С#, что приводит к вызову стандартного конструктора структуры. По определению стандартный конструктор не принимает аргументов. Преимущество вызова стандартного конструктора структуры заключается в том, что каждое поле данных автоматически получает свое стандартное значение:

// Установить для всех полей стандартные значения,

// используя стандартный конструктор.

Point p1 = new Point();

// Выводит Х=0, Y=0

p1.Display();

Перейти на страницу:

Похожие книги