Структуры. Создание структуры. Работа со структурами. Массивы структур.

Структуры. Создание структуры. Работа со структурами

Классы — это ссылочные типы. Это означает, что к объектам классов доступ осуществляется через ссылку. Этим они отличаются от типов значений, к которым в С# реализован прямой доступ. Но иногда желательно получать прямой доступ и к объектам, как в случае нессылочных типов. Одна из причин для этого — эффективность. Ведь очевидно, что доступ к объектам классов через ссылки увеличивает расходы системных ресурсов, в том числе и памяти. Даже для очень маленьких объектов требуются существенные объемы памяти. Для компенсации упомянутых расходов времени и пространства в С# предусмотрены структуры. Структура подобна классу, но она относится к типу значений, а не к ссылочным типам.

Структура – это пользовательский тип, поддерживающий всю функциональность класса, кроме наследования. Тип структуры, определенный в языке C#, в простейшем случае позволяет инкапсулировать несколько полей различных типов. Но элементами структуры в C# могут быть не только поля, а и методы, свойства, события, константы.

Структуры объявляются с использованием ключевого слова struct и синтаксически подобны классам. Формат записи структуры таков:

struct Имя_структуры

{

public Тип поле_1;

public Тип поле_2;

...

public Тип поле_n;

//конструктор с параметром:

public Имя_структуры (Список_параметров)

{

//тело конструктора (операторы)

}

//Методы:

public Тип_возвращаемого_знач Имя_метода_1(Список_параметров)

{

//тело метода (операторы)

}

...

public Тип_возвращаемого_знач Имя_метода_n(Список_параметров)

{

//тело метода (операторы)

}

//События

// …

} //Конец структуры

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

Структуры объявляются с помощью ключевого слова structна глобальном уровне (дофункции Main() или в отдельном файле).

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

// Демонстрация использования структуры.

using System;

{

class StructDemo

{

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

struct Book

{

public string author;

public string title;

public int pages;

public string izdat;

// Пользовательский конструктор с параметрами:

public Book(string a, string t, int p, string iz)

{

author = a;

title = t;

pages=p;

izdat=iz;

}

// Метод, который выводит содержимое структуры на экран:

public void Show()

{

Console.WriteLine(“Автор ” + author + “, заголовок “ + title + “, издательство “ + izdat + “, количество страниц ” + pages);

}

}

// Демонстрируем использование структуры Book:

public static void Main()

{

Book bookl = new Book("Герберт Шилдт", "Полный справочник по C#", , 748, "Санкт-Питербург - Москва – Киев изд. дом «Вильямс»");

// Вызов явно заданного конструктора.

bookl. Show();

Book book2 = new Book(); // Вызов конструктора по умолчанию.

book2. Show();

Book bоокЗ; // Создание объекта без вызова конструктора.

book3. Show();

Console.WriteLine();

If (book3.title == null)

Console.WriteLine("Член " + book3.title" + " содержит null.");

// Следует явно задать значения полей структуры book3.

book3. author= "Э. Троелсен";

book3. title= "Язык программирования С# 2005 и платформа .NET";

book3. izdat="Санкт-Питербург - Москва – Киев изд. дом «Вильямс»";

book3. pages=1168;

book3. Show();

}

}

}

Массив структур

Элементами одномерного массива могут быть и структуры. Рассмотрим создание массива структур Book.

int i,n;

Console. WriteLine(“Введите количество книг”) ;

n = Int32. Parse(Console.ReadLine());

Book [ ] mas = new Book [n];

for (i = 0; i < mas. Length; i+ +)

{

Console. WriteLine(“Введи информацию об ” + i + “ книге!”);

Console. Write (“Автор? ”);

mas [i]. author = Console.ReadLine();

Console. WriteLine();

Console. Write (“Заголовок? ”);

mas [i]. title = Console.ReadLine();

Console. WriteLine();

Console. Write (“Издательство? ”);

mas [i]. izdat = Console.ReadLine();

Console. WriteLine();

Console. Write (“Количество страниц? ”);

mas [i] . pages = Console.ReadLine();

Console. WriteLine();

}

Console. WriteLine(“Содержимое массива:”);

for (i = 0; i < n; i + +)

mas[i]. Show();

Одну структуру можно присваивать другой: book2= book3;, при этом создается копия объекта-структуры.

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

Наши рекомендации