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

Объект структуры может быть создан с помощью оператора new таким же образом, как и объект класса, но в этом нет особой необходимости. Ведь когда используется оператор new, то вызывается конструктор, используемый по умолчанию. А когда этот оператор не используется, объект по-прежнему создается, хотя и не инициализируется. В этом случае инициализацию любых членов структуры придется выполнить вручную.

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

// Продемонстрировать применение структуры.

using System;

// Определить структуру, struct Book {

public string Author; public string Title; public int Copyright;

public Book(string a, string t, int c) {

Author = a;

Title = t;

Copyright = c;

}

}

// Продемонстрировать применение структуры Book, class StructDemo { static void Main() {

Book bookl = new Book('Герберт Шилдт',

'Полный справочник ho C# 4.0',

2010); // вызов явно заданного конструктора Book book2 = new Book(); // вызов конструктора по умолчанию Book ЬоокЗ; // конструктор не вызывается

Console.WriteLine(bookl.Author + ', ' +

bookl.Title + ',    (c)    '    +    bookl.Copyright);

Console.WriteLine();

if (book2.Title == null)

Console.WriteLine('Член book2.Title пуст.');

// А теперь ввести информацию в структуру book2. book2.Title = 'О дивный новый мир'; book2.Author = 'Олдос Хаксли'; book2.Copyright = 1932;

Console.Write('Структура book2 теперь содержит: ');

Console.WriteLine(book2.Author + ', ' +

book2.Title + ',    (c)    '    + book2.Copyright);

Console.WriteLine() ;

// Console.WriteLine(ЬоокЗ.Title); // неверно, этот член структуры

// нужно сначала инициализировать

ЬоокЗ.Title = 'Красный шторм';

Console.WriteLine(ЬоокЗ.Title); // теперь верно

}

}

При выполнении этой программы получается следующий результат.

Герберт Шилдт, Полный справочник по C# 4.0,    (с) 2010

Член book2.Title пуст.

Структура Ьоок2 теперь содержит:

Олдос Хаксли, О дивный новый мир, (с) 1932

Красный шторм

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

Добавить отзыв
ВСЕ ОТЗЫВЫ О КНИГЕ В ИЗБРАННОЕ

0

Вы можете отметить интересные вам фрагменты текста, которые будут доступны по уникальной ссылке в адресной строке браузера.

Отметить Добавить цитату