![]() Главная страница Случайная страница КАТЕГОРИИ: АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторикаСоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника |
Конструкторы
Конструктор предназначен для инициализации объекта. Конструктор вызывается автоматически при создании объекта класса с помощью операции 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.
|