Структуры

public struct Book

{

public decimal price;

public string title;

public string author;

}

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

Все, что может быть вложено в тело класса, может быть вложено и в тело структуры: поля, методы, конструкторы и прочее, включая классы и интерфейсы. Структуры не могут наследовать другие классы или структуры. Структуры могут также определять конструкторы, но не деструкторы. Однако для структуры нельзя определить конструктор по умолчанию (без параметров). Дело в том, что конструктор по умолчанию автоматически определяется для всех структур, и его изменить нельзя. Поскольку структуры не поддерживают наследования, члены структуры нельзя определять с использованием модификаторов abstract, virtual или protected. Если при объявлении класса его поля можно инициализировать, что найдет отражение при работе конструктора класса, то поля структуры не могут быть инициализированы. В конструкторе нельзя вызывать методы класса. Поля структуры должны быть проинициализированы до вызова методов.

Book bookl = new Book("Herb Schildt", "C# A Beginner's Guide", 2001);

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

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

book2.title = "Brave New World"; book2.author = "Aldous Huxley"; book2.copyright = 1932;

Bоок3.title = "Red Storm Rising";

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