Структуры C#

Структуры C#

Всем доброго времени суток. На связи Алексей Гулынин. В прошлой статье мы поговорили про перечисления в C#. В данной статье я бы хотел поговорить про структуры в C#. Для тех, кто программировал на "Turbo Pascal", структуры — это записи (record). Структура состоит из множества переменных, которые упакованы внутри структуры. Это — поля структуры. Эти поля могут иметь разные типы, но все вместе они образуют единое значение, которое называется значением этой структуры. Кроме полей в структуре могут быть методы и события. Она по сути является классом. Различие заключается в том, что класс — это ссылочный тип (ReferenceType). Переменная типа "Класс" — является ссылкой, т.е. указывает на объект, а объект хранится в динамической области памяти (куча). Структура — это "ValueType". Переменная типа "Структура" хранится в стеке.

Давайте на примерах разберем, как определяется этот тип данных и как с ним работать.

struct Room {
   public double widthRoom;
   public double lengthRoom;
   public int numberOfWindows;
}

В данном примере мы создали структуру "Room" с 3 полями: ширина комнаты, её высота и количество окон. Поработаем с нашей комнатой:

Room myRoom;
myRoom.widthRoom = 5;
myRoom.lengthRoom = 4;
myRoom.numberOfWindows = 2;
Console.WriteLine("Наша комната: ширина {0}, высота {1}, количество окон {2}", myRoom.widthRoom, myRoom.lengthRoom, myRoom.numberOfWindows);
Console.ReadLine();

Убедимся в том, что "Структура" действительно является "ValueType". Создадим ещё одну комнату myRoom2 и скопируем ей значение myRoom. При этом произойдёт полное копирование полей. Изменим у второй комнаты количество окон на 1. Что при этом произойдёт с количеством окон первой комнаты? Останется также 2 окна. Это ещё раз говорит нам о том, что структура копируется по значению, а не по ссылке (в отличие от объектов):

Room myRoom2 = myRoom;
myRoom2.numberOfWindows = 1;
Console.WriteLine("Наша 2 комната: ширина {0}, высота {1}, количество окон {2}", myRoom2.widthRoom, myRoom2.lengthRoom, myRoom2.numberOfWindows);
Console.WriteLine("Наша 1 комната: ширина {0}, высота {1}, количество окон {2}", myRoom.widthRoom, myRoom.lengthRoom, myRoom.numberOfWindows);

Теперь создадим в структуре метод, который выводит информацию о комнате:

struct Room {
   public double widthRoom;
   public double lengthRoom;
   public int numberOfWindows;
   public void showInfoAboutRoom()
   {
      Console.WriteLine("Наша комната: ширина {0}, высота {1}, количество окон {2}", widthRoom, lengthRoom, numberOfWindows);
   }
}
myRoom.showInfoAboutRoom();

Для информации скажу, что в структуре можно описать конструктор. Если этого не сделать, то будет создан конструктор по умолчанию. Можно также задать свойства (property). Свойства реализовываются точно также, как и в случае с классами. Отличие конструктора структуры от конструктора класса заключается в том, что в конструкторе структуры мы должны проинициализировать все поля. Переделаем нашу комнату:

Свойства:

public double WidthRoom {get; set;}
public double LengthRoom { get; set; }
public int NumberOfWindows { get; set; }

Конструктор:

public Room(double WRoom, double LRoom, int NWindows)
{
   this.widthRoom = WRoom;
   this.lengthRoom = LRoom;
   this.numberOfWindows = NWindows;
}

Если мы описали свой собственный конструктор, то в случае со структурами останется и конструктор по умолчанию. В случае с классами его, как мы знаем, не будет.

В данной статье вы узнали, как работать со структурами в C#

На связи был Алексей Гулынин, увидимся в следующих статьях.


Комментарии:

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *