Energy
education

сайт для тех, кто хочет изучать энергетику

15. Структуры

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

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

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

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

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

Например, объявление структуры Books:

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

В следующей программе показано применение структуры:

    
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;        /* Определение Book1 типа Book */
      Books Book2;        /* Определение Book2 типа Book */
      /* описание книги 1 */
      Book1.title = "C Programming";
      Book1.author = "Nuha Ali"; 
      Book1.subject = "C Programming Tutorial";
      Book1.book_id = 6495407;
      /* описание книги 2 */
      Book2.title = "Telecom Billing";
      Book2.author = "Zara Ali";
      Book2.subject =  "Telecom Billing Tutorial";
      Book2.book_id = 6495700;
      /* печать информации Book1 */
      Console.WriteLine("Книга 1 Название : {0}", Book1.title);
      Console.WriteLine("Книга 1 Автор : {0}", Book1.author);
      Console.WriteLine("Книга 1 Предмет : {0}", Book1.subject);
      Console.WriteLine("Книга 1 ID книги :{0}", Book1.book_id);
      /* печать информации Book2 */
      Console.WriteLine("Книга 2 Название : {0}", Book2.title);
      Console.WriteLine("Книга 2 Автор : {0}", Book2.author);
      Console.WriteLine("Книга 2 Предмет : {0}", Book2.subject);
      Console.WriteLine("Книга 2 ID книги : {0}", Book2.book_id);       
      Console.ReadKey();
   }
}
    

Если приведенный выше код скомпилировать и выполнить, это приведет к следующему результату:

    
Book 1 Название : C Programming
Book 1 Автор : Nuha Ali
Book 1 Предмет : C Programming Tutorial
Book 1 ID книги : 6495407
Book 2 Название : Telecom Billing
Book 2 Автор : Zara Ali
Book 2 Предмет : Telecom Billing Tutorial
Book 2 ID книги : 6495700
    

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

Это пример простой структуры с именем Books. Структуры в C# довольно сильно отличаются от структур в C или C++. Структуры C# имеют следующие особенности:

  • Структуры могут иметь методы, поля, индексы, свойства, операторы методов и события.
  • Структуры могут иметь определенные конструкторы, но не имеют деструкторов. Однако, вы не можете определить конструктор по умолчанию для структуры. Конструктор по умолчанию для структуры определяется автоматически и его нельзя изменить.
  • В отличие от классов, структуры не могут наследовать другие структуры или классы.
  • Структуры не могут быть использованы в качестве основы для других структур или классов.
  • Структура может реализовать один или несколько интерфейсов.
  • Члены структуры не могут быть определены как abstract, virtual или protected.
  • Когда вы создаете структуру object используя оператор New, она будет создана и соответствующий конструктор будет вызыван. В отличие от классов, структуры могут быть созданы без использования оператора New.
  • Если оператор New не используется, поля останутся не назначенными и объект не может быть использован, пока все поля не инициализируются.

Классы или структуры

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

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

В свете вышеизложенных обсуждений, перепишем предыдущий пример:

    
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("Название : {0}", title);
      Console.WriteLine("Автор : {0}", author);
      Console.WriteLine("Предмет : {0}", subject);
      Console.WriteLine("ID книги :{0}", book_id);
   }
};  
public class testStructure
{
   public static void Main(string[] args)
   {
      Books Book1 = new Books(); /* Определение Book1 типа Book */
      Books Book2 = new Books(); /* Определение Book2 типа Book */
      /* описание книги 1 */
      Book1.getValues("C Programming",
      "Nuha Ali", "C Programming Tutorial",6495407);
      /* описание книги 2 */
      Book2.getValues("Telecom Billing",
      "Zara Ali", "Telecom Billing Tutorial", 6495700);
      /* печать информации Book1 */
      Book1.display();
      /* печать информации Book2 */
      Book2.display(); 
      Console.ReadKey();
   }
}
    

Если приведенный выше код скомпилировать и выполнить, это приведет к следующему результату:

    
Название  : C Programming
Автор : Nuha Ali
Предмет : C Programming Tutorial
ID книги : 6495407
Название  : Telecom Billing
Автор : Zara Ali
Предмет : Telecom Billing Tutorial
ID книги : 6495700