Компьютерные книги
Главное меню
Главная Поиск по сайту Добавить материал О нас Карта книг Карта сайта
Реклама
computersbooks.net -> Добавить материал -> Языки программирования -> Ватсон К. -> "С#" -> 93

С# - Ватсон К.

Ватсон К. С# — Лори, 2005 . — 879 c.
ISBN 1-861004-98-2
Скачать (прямая ссылка): vatsonc2005.pdf
Предыдущая << 1 .. 87 88 89 90 91 92 < 93 > 94 95 96 97 98 99 .. 404 >> Следующая


class MyClass

{

public MyClass I

' (

// Код «сонстру] opa

}

Такой конструктор обладает тем же именем, что и класс, в кол^юм он содержится, не имеет параметров (что превращает его в конструктор, использующийся по умолчанию) и является общим, что позволяет создавать экземпляры объектов данного класса (более подробная информация по этому вопросу содержится в предыдущей главе).

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

class MyClass

i | private MyClaea О (

П Код :оистру*«5ра

)

)
188 Глава 9

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

class МуСlasа

public HyClaaed (

! I Код конструктора, испояьэутэцегося по умолчанию .

public ityClasafint myInt)

{

tt Код конструхтара, использующегося не по .

// умолчанию (используется параметр щуХпЬ)

}

Количество задаваемых конструкторов не ограничено.

Деструкторы определяются с помощью несколько иного синтаксиса. Деструктор, используемый в .NET (н предоставляемый классом system.object), называется Finalized, однако для объявления деструктора используется другое имя. Вместо того чтобы переопределять Finalized, мы используем следующий код:

class HyClass -MyClaag()

<

// тепа деструктора

)

}

Код, заключенный в деструкторе, будет выполняться при сборке мусора, позволяя освобождать удерживаемые ресурсы. После вызова деструктора происходят явные вызовы деструкторов базовых классов, включая вызов Finalized в корневом классе system.object. Такой способ позволяет .NET Framework гарантировать выполнение, поскольку переопределение Finalized означало бы, что необходимы явные вызовы базовых классов, а это тант в себе потенциальную опасность (мы познакомимся с вызовом методов базовых классов в следующей главе).

Последовательность выполнения конструкторов

Если нам требуется выполнить несколько действий в конструкторах класса, то удобнее поместить весь этот код в одном месте, что дает те же преимущества, что и разбиение кода на функции. Для этого можно использовать отдельный метод (см. следующую главу), одиако в C# имеется замечательная альтернативная возможность. Каждый конструктор может быть настроен таким образом, что перед выполнением собственного кода он будет вызывать некоторый другой конструктор.

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

Для того чтобы создать экземпляр производного класса, необходимо создать экземпляр его базового класса. В свою очередь, чтобы создать экземпляр этого базового класса, требуется создать экземпляр базового класса этого базового класса — и так далее до system.object. В результате, какой бы конструктор ни использовался для создания класса, Syatem.object.objectd всегда будет вызываться первым.
Определение классов

189

Если используется конструктор класса не по умолчанию, то в таком случае по умолчанию будет использоваться конструктор базового класса, сигнатура которого совпадает с сигнатурой данного конструктора. Если таковой обнаружить ие удается, то используется конструктор базового класса по умолчанию (это происходит всегда, за исключением корневого класса system.object, поскольку у него отсутствуют конструкторы, использующиеся не по умолчанию). Давайте рассмотрим некоторый пример, который поможет проиллюстрировать последовательность событий. Рассмотрим следующую иерархию объектов:

public claee ИуВлаеС1аяв .

(

public MyBaeeClaee()

(

)

public bfyBaseClasa (int i)

<

)

>

public clast; ¦JyDerivedClaee ; MyBaseClass

<

public MyDerivedClaee()

public MyDerivedClaea(int i)

public MyDerivedClaas(int i, int j)

(

I

Если мы попытаемся создать экземпляр класса MyDerivedCiass следующим образом:

KyUerivedClafiJi myObj » new HyQerivedClaaaO ,*

то это приведет к такой последовательности событий:

? Выполнится конструктор System.Object.Object О .

? Выполнится конструктор MyBaseClasa .MyBaaeClaas О .

? ВЫПОЛНИТСЯ конструктор MyDerivedCiass.MyDerivedCiass О .

Если же мы попытаемся создать экземпляр класса таким образом: KyDerivedClasa щуОЬз -new MyDerivedCiass(4)i то соответствующая последовательность будет иметь следующий вид:

? Выполнится конструктор System,Object,Object О.

? Выполнится конструктор MyBaseClass.MyBaseClass (iilt i),

? Выполнится конструктор MyDerivedCiass.MyDerivedCiass(int i).

Наконец, если мы воспользуемся следующим вариантом:

MyDerivedClasa myObj * new MyDerivedCiass (4, 8);
190

Глава 9

то произойдет вот что:

? Выполнится конструктор System.Object.object!).

? Выполнится.конструктор MyBaseClass.MyBaseClass ().

? ВЫПОЛНИТСЯ конструктор MyDerivedciass.MyDerivedciass (int i, int j).
Предыдущая << 1 .. 87 88 89 90 91 92 < 93 > 94 95 96 97 98 99 .. 404 >> Следующая
Книги
Web-программирован-
ие
Аппаратное обеспечение Графика Руководство по П.О. Самоучитель Теория программирования Фотошоп Языки программирования
Новые книги
Вирт Н. "Систематическое программирование " (Теория программирования)

Эком "Microsoft Excel 2000 шаг за шагом Русская версия самоучитель " (Самоучитель)

Поляков А.Ю. "Методы и алгоритмы компьютерной графики в примерах Vizual C++" (Графика)

Баяковский Ю.М. "Графическая библиотека Open GL " (Графика)

Валиков А. "Технология " (Языки программирования)
Авторские права © 2013 ComputersBooks. Все права защищены.