Программирование >>  Обработка исключительных ситуаций 

1 ... 35 36 37 [ 38 ] 39 40 41 ... 142


Класс может иметь несколько конструкторов с разными параметрами для разных видов инициализации.

Если программист не указал ни одного конструктора или какие-то поля не были инициализированы, полям значимых типов присваивается нуль, полям ссылочных типов - значение null.

J Конструктор, вызываемый без параметров, называется конструктором по умолчанию.

До сих пор мы задавали начальные значения полей класса при описании класса см., например, листинг 5.1). Это удобно в том случае, когда для всех экземпляров класса начальные значения некоторого поля одинаковы. Если же при создании юъектов требуется присваивать полю разные значения, это следует делать в кон-;трукторе. В листинге 5.6 в класс Demo добавлен конструктор, а поля сделаны закрытыми (ненужные в данный момент элементы опущены). В программе создаются два объекта с различными значениями полей.

Листинг 5.6. Класс с конструктором ..s-ng System;

=mespace ConsoleApplicationi class Demo

public Demo( int a, double у ) {

this.а this.у

= а;

= у:

конструктор с параметрами

public double GetyO

метод получения поля у

return у;

int а;

double у;

class Classl

static void MainO

Demo a = new Demo( 300, 0.002 )

Console.WriteLineC a.GetyO ):

Demo b = new Demo( 1, 5.71 );

Console.WriteLineC b.GetyO );

вызов конструктора

результат; 0,002

вызов конструктора

результат: 5,71



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

class Demio

public roC int a ) {

this.a = a:

this.у = 0.002;

конструктор 1

public Demo( double у )

конструктор 2

this.a this.у

Dno x = new Demo( 300 ); Dno у = new ncC 5.71 );

вызов конструктора 1 вызов конструктора 2

Все конструкторы должны иметь разные сигнатуры.

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

class Demo

public DemoC int a ) {

this.a

конструктор 1

public DemoC int a, double у ) : thisC a ) вызов конструктора 1

this.у

Конструкция, находящаяся после двоеточия, называется инициализатором, то есть тем кодом, который исполняется до начала выполнения тела конструктора.

Как вы помните, все классы в С# имеют общего предка - класс object. Конструктор любого класса, если не указан инициализатор, автоматически вызывает конструктор своего предка. Это можно сделать и явным образом с помощью



ключевого слова base, обозначающего конструктор базового класса. Таким образом, первый конструктор из предыдущего примера можно записать и так:

public DemoC int а ) : baseC) {

конструктор 1

this.а

ПРИМЕЧАНИЕ -

Конструктор базового класса вызывается явным образом в тех случаях, когда ему требуется передать параметры.

До сих пор речь шла об обычных конструкторах, или конструкторах экземп-.лра. Существует второй тип конструкторов - статические конструкторы, или конструкторы класса. Конструктор экземпляра инициализирует данные экземпляра, конструктор класса - данные класса.

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

Некоторые классы содержат только статические данные, и, следовательно, созда-зать экземпляры таких объектов не имеет смысла. Чтобы подчеркнуть этот факт, з первой версии С# описывали пустой закрытый (private) конструктор. Это предотвращало попытки создания экземпляров класса. В листинге 5.7 приведен пример класса, который служит для группировки величин. Создавать экземпляры этого класса запрещено.

Листинг 5.7. Класс со статическим и закрытым конструкторами (для версий ниже 2.0) .sing System;

STiespace Consol eAppl ication i

class {

private DC){} static DC)

закрытый конструктор II статический конструктор

a = 200;

static int a: static double public static

b = 0.002; void PrintC)

Console.WriteLineC Console.WriteLineC

a = b =

+ a ); + b );



1 ... 35 36 37 [ 38 ] 39 40 41 ... 142

© 2006 - 2024 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки.
Яндекс.Метрика