Структуры. Создание структуры. Работа со структурами. Массивы структур.
Структуры. Создание структуры. Работа со структурами
Классы — это ссылочные типы. Это означает, что к объектам классов доступ осуществляется через ссылку. Этим они отличаются от типов значений, к которым в С# реализован прямой доступ. Но иногда желательно получать прямой доступ и к объектам, как в случае нессылочных типов. Одна из причин для этого — эффективность. Ведь очевидно, что доступ к объектам классов через ссылки увеличивает расходы системных ресурсов, в том числе и памяти. Даже для очень маленьких объектов требуются существенные объемы памяти. Для компенсации упомянутых расходов времени и пространства в С# предусмотрены структуры. Структура подобна классу, но она относится к типу значений, а не к ссылочным типам.
Структура – это пользовательский тип, поддерживающий всю функциональность класса, кроме наследования. Тип структуры, определенный в языке 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 . Структура может реализовать один или несколько интерфейсов.