Учебники

C # — Структуры

В C # структура является типом данных типа значения. Это помогает вам сделать одну переменную для хранения связанных данных различных типов данных. Ключевое слово struct используется для создания структуры.

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

  • заглавие
  • автор
  • Предмет
  • ID книги

Определение структуры

Чтобы определить структуру, вы должны использовать инструкцию struct. Оператор struct определяет новый тип данных с более чем одним членом для вашей программы.

Например, вот как вы можете объявить структуру Book —

struct Books {
   public string title;
   public string author;
   public string subject;
   public int book_id;
};  

Следующая программа показывает использование структуры —

Live Demo

using System;

struct Books {
   public string title;
   public string author;
   public string subject;
   public int book_id;
};  

public class testStructure {
   public static void Main(string[] args) {
      Books Book1;   /* Declare Book1 of type Book */
      Books Book2;   /* Declare Book2 of type Book */

      /* book 1 specification */
      Book1.title = "C Programming";
      Book1.author = "Nuha Ali"; 
      Book1.subject = "C Programming Tutorial";
      Book1.book_id = 6495407;

      /* book 2 specification */
      Book2.title = "Telecom Billing";
      Book2.author = "Zara Ali";
      Book2.subject =  "Telecom Billing Tutorial";
      Book2.book_id = 6495700;

      /* print Book1 info */
      Console.WriteLine( "Book 1 title : {0}", Book1.title);
      Console.WriteLine("Book 1 author : {0}", Book1.author);
      Console.WriteLine("Book 1 subject : {0}", Book1.subject);
      Console.WriteLine("Book 1 book_id :{0}", Book1.book_id);

      /* print Book2 info */
      Console.WriteLine("Book 2 title : {0}", Book2.title);
      Console.WriteLine("Book 2 author : {0}", Book2.author);
      Console.WriteLine("Book 2 subject : {0}", Book2.subject);
      Console.WriteLine("Book 2 book_id : {0}", Book2.book_id);       

      Console.ReadKey();
   }
}

Когда приведенный выше код компилируется и выполняется, он дает следующий результат —

Book 1 title : C Programming
Book 1 author : Nuha Ali
Book 1 subject : C Programming Tutorial
Book 1 book_id : 6495407
Book 2 title : Telecom Billing
Book 2 author : Zara Ali
Book 2 subject : Telecom Billing Tutorial
Book 2 book_id : 6495700

Особенности структур C #

Вы уже использовали простую структуру с именем Книги. Структуры в C # весьма отличаются от традиционных C или C ++. Структуры C # имеют следующие особенности —

  • Структуры могут иметь методы, поля, индексаторы, свойства, операторные методы и события.

  • Структуры могут иметь определенные конструкторы, но не деструкторы. Однако вы не можете определить конструктор по умолчанию для структуры. Конструктор по умолчанию определяется автоматически и не может быть изменен.

  • В отличие от классов, структуры не могут наследовать другие структуры или классы.

  • Структуры не могут использоваться в качестве основы для других структур или классов.

  • Структура может реализовывать один или несколько интерфейсов.

  • Члены структуры не могут быть определены как абстрактные, виртуальные или защищенные.

  • Когда вы создаете объект структуры с помощью оператора New , он создается и вызывается соответствующий конструктор. В отличие от классов, структуры могут быть созданы без использования оператора New.

  • Если оператор New не используется, поля остаются неназначенными, и объект нельзя использовать, пока все поля не будут инициализированы.

Структуры могут иметь методы, поля, индексаторы, свойства, операторные методы и события.

Структуры могут иметь определенные конструкторы, но не деструкторы. Однако вы не можете определить конструктор по умолчанию для структуры. Конструктор по умолчанию определяется автоматически и не может быть изменен.

В отличие от классов, структуры не могут наследовать другие структуры или классы.

Структуры не могут использоваться в качестве основы для других структур или классов.

Структура может реализовывать один или несколько интерфейсов.

Члены структуры не могут быть определены как абстрактные, виртуальные или защищенные.

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

Если оператор New не используется, поля остаются неназначенными, и объект нельзя использовать, пока все поля не будут инициализированы.

Класс против структуры

Классы и структуры имеют следующие основные различия —

  • классы являются ссылочными типами, а структуры являются типами значений
  • структуры не поддерживают наследование
  • структуры не могут иметь конструктор по умолчанию

В свете вышесказанного, давайте перепишем предыдущий пример —

Live Demo

using System;

struct Books {
   private string title;
   private string author;
   private string subject;
   private int book_id;
   
   public void getValues(string t, string a, string s, int id) {
      title = t;
      author = a;
      subject = s;
      book_id = id;
   }
   
   public void display() {
      Console.WriteLine("Title : {0}", title);
      Console.WriteLine("Author : {0}", author);
      Console.WriteLine("Subject : {0}", subject);
      Console.WriteLine("Book_id :{0}", book_id);
   }
};  

public class testStructure {

   public static void Main(string[] args) {
      Books Book1 = new Books();   /* Declare Book1 of type Book */
      Books Book2 = new Books();   /* Declare Book2 of type Book */

      /* book 1 specification */
      Book1.getValues("C Programming",
      "Nuha Ali", "C Programming Tutorial",6495407);

      /* book 2 specification */
      Book2.getValues("Telecom Billing",
      "Zara Ali", "Telecom Billing Tutorial", 6495700);

      /* print Book1 info */
      Book1.display();

      /* print Book2 info */
      Book2.display(); 

      Console.ReadKey();
   }
}

Когда приведенный выше код компилируется и выполняется, он дает следующий результат —