Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Ответы_ТП

.pdf
Скачиваний:
9
Добавлен:
21.05.2015
Размер:
880.4 Кб
Скачать

Bookbook2 = newBook(); // Вызов конструктора

// по умолчанию.

BookbоокЗ; // Создание объекта без вызова

// конструктора.

Console.WriteLine(book1.title + ", автор " +book1.author + ―, (с) " + book1. copyright );

Console.WriteLine(); if(book2.title == null)

Console.WriteLine("Член book2.title содержит null."); // Теперь поместим в структуру book2 данные. book2.title = "Brave New World ";

book2.author = "Aldous Huxley"; book2.copyright = 1932;

Console.Write ("Теперь структура book2 содержит:\n" ) ;

Console.WriteLine(book2.title + ", автор " +book2.author +

", (c) " + book2.copyright); Console.WriteLine();

//Console.WriteLine(bоокЗ.title); // Ошибка: сначала

//необходима

//инициализация.

bоокЗ.title = "Red Storm Rising";

Console.WriteLine(bоокЗ.title); // Теперь все Ok!

}}

Вот результаты выполнения этой программы:

С# A Beginner's Guide, автор Herb Schildt, ( с) 2001

Структура может быть создана либо с помощью оператора new, который вызывает соответствующий конструктор, либо простым объявлением объекта. При использовании оператора new поля структуры будут инициализированы, причем это сделает либо конструктор по умолчанию (он инициализирует все поля значениями по умолчанию), либо конструктор, определенный пользователем. Если оператор new не используется, как в случае объекта bоокЗ, созданный таким образом объект остается неинициализированным, и его поля должны быть установлены до начала использования.

При присваивании одной структуры другой создается копия этого объекта. Это — очень важное отличие struct-объекта от сlass-объекта . Как упоминалось выше, присваивая одной ссылке на класс другую, вы просто меняете объект, на который ссылается переменная, стоящая с левой стороны от оператора присваивания. А присваивая одной struct- переменной другую, вы создаете копию объекта, указанного с правой стороны от оператора присваивания.

Поскольку структуры — это типы значений, они обрабатываются напрямую, а не через ссылки. Таким образом, тип struct не требует отдельной ссылочной переменной. Это означает, что при использовании структур расходуется меньший объем памяти. Более того, благодаря прямому доступу к структурам, при раб оте с ними не снижается производительность, что имеет место при доступе к объектам классов. Поскольку классы — ссылочные типы, доступ к их объектам осуществляется через ссылки. Такая косвенность увеличивает затраты системных ресурсов при каждом доступе. Структуры этим не страдают. В общем случае, если вам нужно хранить небольшую группу связанных данных, но не нужно обеспечивать наследование и использовать другие достоинства ссылочных типов, тип struct может оказаться более предпочтительным вариантом.

43.Элементы класса

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

Функциональные элементы класса не тиражируются, то есть всегда хранятся в единственном экземпляре. Для работы с данными класса используются методы класса (статические методы),для работы с данными экземпляра — методы экземпляра,или просто методы.

Поля и методы являются основными элементами класса. Кроме того, в классе можно задавать целую гамму других элементов: свойства, события, индексаторы, операции, конструкторы, дестр укторы, а также типы (рис. 1.1).

Ниже приведено краткое описание всех элементов класса

Константы класса хранят неизменяемые значения, связанные с

классом.

Полясодержат данные класса.

Методы реализуют вычисления или другие действия, выполняемые классом или экземпляром.

Свойстваопределяют характеристики класса в совокупности со способами их задания и получения, то есть методами записи и чтения.

Конструкторыреализуют действия по инициализации экземпляров или клас са в целом.

Деструкторыопределяют действия, ко торые необходимо выполнить до того, как объект будет уничтожен.

Индексаторыобеспечивают возможность доступа к элементам класса по их порядковому номеру

Операции задают действия с объектами с помощью знаков

операций.

События определяют уведомления, которые может генерировать

класс.

Типы — это типы данных, внутренние по отношению к классу.

44.Явная реализация членов интерфейса

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

interface IMyiF {

int myMeth(int x);

}

Вполне допустимо реализовать интерфейс IMyiF следующим образом:

class MyClass : IMyIF{

int IMyIF.myMeth(int x) {

return x / 3;

}}

При реализации метода myMeth() члена интерфейса IMyiF указывается его полное имя, включающее имя интерфейса.

Явная реализация членов интерфейса может понадобиться по двум причинам. Во -первых, реализуя метод с использованием полностью квалифицированного имени, вы тем самым обозначаете части закрытой реализации, которые не "видны" коду, определенному вне класса. Во-вторых, класс может реализовать два интерфейса, которые объявляют методы с одинаковыми именами и ти пами. Полная квалификация именпозволяет избежать неопределенности ситуации.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]