Студопедия

Главная страница Случайная страница

Разделы сайта

АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторикаСоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника






Конструкторы






Конструктор предназначен для инициализации объекта.

Конструктор вызывается авто­матически при создании объекта класса с помощью операции new. Имя конст­руктора совпадает с именем класса.

Основные свойства конструкторов:

1. Конструктор не возвращает значение, даже типа void.

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

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

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

В следующем примере добавлен конструктор и метод Print для вывода информации об объекте:

class Circle

{

public int x, y, radius;

public const double pi = 3.14;

public static string name = " Окружность";

public Circle(int x, int y, int r)//конструктор

{ this.x = x; this.y = y; radius = r; }

public void Print()

{

Console.Write(name);

Console.WriteLine(" с центром в точке ({0}, {1}) и радиусом {2}", x, y, radius);

Console.WriteLine();

}

}

class Program

{

static void Main()

{

Circle a = new Circle(0, 0, 1); //вызов конструктора

a.Print();

Circle b=new Circle(10, 10, 5); //вызов конструктора

b.Print();

}

}

Часто бывает удобно задать в классе несколько конструкторов, чтобы обес­печить возможность инициализации объектов разными способами. Для этого конструкторы должны иметь разные сигнатуры.

Рассмотрим это на примере:

class Circle

{

public int x, y, radius;

public const double pi = 3.14;

public static string name = " Окружность";

public Circle(int x, int y, int r)//конструктор 1

{ this.x = x; this.y = y; radius = r; }

public Circle(int r)//конструктор 2

{ radius = r; }

public void Print()

{

Console.Write(name);

Console.WriteLine(" с центром в точке ({0}, {1}) и радиусом {2}", x, y, radius);

Console.WriteLine();

}

}

class Program

{

static void Main()

{

Circle a = new Circle(0, 0, 1); //вызов конструктора 1

a.Print();

Circle b=new Circle(5); //вызов конструктора 2

b.Print();

}

}

Обратите внимание на то, что в конструктое 2 не были инициализированы поля x, y, поэтому им присваивается значение 0.

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

public Circle(int r) //конструктор 1

{

radius = r;

}

public Circle(int x, int y, int r): this(r) //конструктор 2

{

this.x = x;

this.y = y;

}

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






© 2023 :: MyLektsii.ru :: Мои Лекции
Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав.
Копирование текстов разрешено только с указанием индексируемой ссылки на источник.