Страница 66 из 502
Конструктор инициализирует объект при его создании. У конструктора такое же имя, как и у его класса, а с точки зрения синтаксиса он подобен методу. Но у конструкторов нет возвращаемого типа, указываемого явно. Ниже приведена общая форма конструктора.
<b><i>доступ имя_класса{список_параметров)</i> {</b>
<b> // тело конструктора</b>
<b>}</b>
Как правило, конструктор используется для задания первоначальных значений переменных экземпляра, определенных в классе, или же для выполнения любых других установочных процедур, которые требуются для создания полностью сформированного объекта. Кроме того, доступ обычно представляет собой модификатор доступа типа public, поскольку конструкторы зачастую вызываются в классе. А список_параметров может быть как пустым, так и состоящим из одного или более указываемых параметров.
У всех классов имеются конструкторы, независимо от того, определите вы их или нет, поскольку в C# автоматически предоставляется конструктор, используемый по умолчанию и инициализирующий все переменные экземпляра их значениями по умолчанию. Для большинства типов данных значением по умолчанию является нулевое, для типа bool — значение false, а для ссылочных типов — пустое значение. Но как только вы определите свой собственный конструктор, то конструктор по умолчанию больше не используется.
Ниже приведен простой пример применения конструктора.
<b>// Простой конструктор.</b>
<b>using System;</b>
<b>class MyClass { </b>
<b> public int x;</b>
<b> public MyClass() {</b>
<b> x = 10;</b>
<b> }</b>
<b>}</b>
<b>class ConsDemo {</b>
<b> static void Main() {</b>
<b> MyClass tl = new MyClass();</b>
<b> MyClass t2 = new MyClass();</b>
<b> Console.WriteLine(tl.x + " " + t2.x);</b>
<b> }</b>
<b>}</b>
В данном примере конструктор класса MyClass имеет следующий вид.
<b>public MyClassO {</b>
<b> x = 10;</b>
<b>}</b>
Обратите внимание на то, что этот конструктор обозначается как public. Дело в том, что он должен вызываться из кода, определенного за пределами его класса. В этом конструкторе переменной экземпляра класса MyClass присваивается значение 10. Он вызывается в операторе new при создании объекта. Например, в следующей строке:
<b>MyClass t1 = new MyClass();</b>
конструктор MyClass() вызывается для объекта t1, присваивая переменной его экземпляра t1.х значение 10. То же самое происходит и для объекта t2. После конструирования переменная t2.х будет содержать то же самое значение 10. Таким образом, выполнение приведенного выше кода приведет к следующему результату.
<b>10 10</b>
В предыдущем примере использовался конструктор без параметров. В некоторых случаях этого оказывается достаточно, но зачастую конструктор, должен принимать один или несколько параметров. В конструктор параметры вводятся таким же образом, как и в метод. Для этого достаточно объявить их в скобках после имени конструктора. Ниже приведен пример применения параметризированного конструктора MyClass.
<b>// Параметризированный конструктор.</b>
<b>using System;</b>
<b>class MyClass { public int x;</b>
<b> public MyClass(int i) { </b>
<b> x = i;</b>
<b> }</b>
<b>}</b>
<b>class ParmConsDemo { </b>
<b> static void Main() {</b>
<b> MyClass tl = new MyClass(10);</b>
<b> MyClass t2 = new MyClass(88);</b>
<b> Console.WriteLine(tl.x + " " + t2.x);</b>
<b> }</b>
<b>}</b>
При выполнении этого кода получается следующий результат.
<b>10 88</b>
В данном варианте конструктора MyClass() определен параметр i, с помощью которого инициализируется переменная экземпляра х. Поэтому при выполнении следующей строки кода:
<b>MyClass t1 = new MyClass(10);</b>
параметру i передается значение, которое затем присваивается переменной х.
Класс Building можно усовершенствовать, добавив в него конструктор, автоматически инициализирующий поля Floors, Area и Occupants при создании объекта. Обратите особое внимание на то, как создаются объекты класса Building.
<b>// Добавить конструктор в класс Building.</b>
<b>using System;</b>
<b>class Building {</b>
<b> public int Floors; // количество этажей</b>
<b> public int Area; // общая площадь здания</b>
<b> public int Occupants; // количество жильцов</b>