Вход/Регистрация
Полное руководство. С# 4.0
вернуться

Шилдт Герберт

Шрифт:

В приведенных выше примерах программ переменные экземпляра каждого объек та типа Building приходилось инициализировать вручную, используя, в частности, следующую последовательность операторов. house.Occupants = 4; house.Area = 2500; house.Floors = 2;

Такой прием обычно не применяется в профессионально написанном коде С#. Кро ме того, он чреват ошибками (вы можете просто забыть инициализировать одно из по лей). Впрочем, существует лучший способ решить подобную задачу: воспользоваться конструктором.

Конструктор инициализирует объект при его создании. У конструктора такое же имя, как и у его класса, а с точки зрения синтаксиса он подобен методу. Но у конструк торов нет возвращаемого типа, указываемого явно. Ниже приведена общая форма конструктора. доступ имя_класса(список_параметров) { // тело конструктора }

Как правило, конструктор используется для задания первоначальных значений пе ременных экземпляра, определенных в классе, или же для выполнения любых других установочных процедур, которые требуются для создания полностью сформирован ного объекта. Кроме того, доступ обычно представляет собой модификатор доступа типа public, поскольку конструкторы зачастую вызываются в классе. А список_па- раметров может быть как пустым, так и состоящим из одного иди более указываемых параметров.

У всех классов имеются конструкторы, независимо от того, определите вы их или нет, поскольку в C# автоматически предоставляется конструктор, используемый по умолчанию и инициализирующий все переменные экземпляра их значениями по умолчанию. Для большинства типов данных значением по умолчанию является ну левое, для типа bool — значение false, а для ссылочных типов — пустое значение. Но как только вы определите свой собственный конструктор, то конструктор по умол чанию больше не используется.

Ниже приведен простой пример применения конструктора. // Простой конструктор. using System; class MyClass { public int x; public MyClass { x = 10; } } class ConsDemo { static void Main { MyClass t1 = new MyClass; MyClass t2 = new MyClass; Console.WriteLine(t1.x + " " + t2.x); } }

В данном примере конструктор класса MyClass имеет следующий вид. public MyClass { x = 10; }

Обратите внимание на то, что этот конструктор обозначается как public. Дело в том, что он должен вызываться из кода, определенного за пределами его класса. В этом конструкторе переменной экземпляра класса MyClass присваивается значе ние 10. Он вызывается в операторе new при создании объекта. Например, в следующей строке: MyClass t1 = new MyClass;

конструктор MyClass вызывается для объекта t1, присваивая переменной его эк земпляра t1.х значение 10. То же самое происходит и для объекта t2. После констру ирования переменная t2.х будет содержать то же самое значение 10. Таким образом, выполнение приведенного выше кода приведет к следующему результату. 10 10 Параметризированные конструкторы

В предыдущем примере использовался конструктор без параметров. В некоторых случаях этого оказывается достаточно, но зачастую конструктор, должен принимать один или несколько параметров. В конструктор параметры вводятся таким же образом, как и в метод. Для этого достаточно объявить их в скобках после имени конструктора. Ниже приведен пример применения параметризированного конструктора MyClass. // Параметризированный конструктор. using System; class MyClass { public int x; public MyClass(int i) { x = i; } } class ParmConsDemo { static void Main { MyClass t1 = new MyClass(10); MyClass t2 = new MyClass(88); Console.WriteLine(t1.x + " " + t2.x); } }

При выполнении этого кода получается следующий результат. 10 88

В данном варианте конструктора MyClass определен параметр i, с помощью которого инициализируется переменная экземпляра х. Поэтому при выполнении следующей строки кода: MyClass t1 = new MyClass(10);

параметру i передается значение, которое затем присваивается переменной х. Добавление конструктора в класс Building

Класс Building можно усовершенствовать, добавив в него конструктор, автомати чески инициализирующий поля Floors, Area и Occupants при создании объекта. Обратите особое внимание на то, как создаются объекты класса Building. // Добавить конструктор в класс Building. using System; class Building { public int Floors; // количество этажей public int Area; // общая площадь здания public int Occupants; // количество жильцов // Параметризированный конструктор для класса Building. public Building(int f, int a, int o) { Floors = f; Area = a; Occupants = o; } // Возвратить площадь на одного человека. public int AreaPerPerson { return Area / Occupants; } // Возвратить максимальное количество человек, занимающих здание, // исходя из заданной минимальной площади на одного человека. public int MaxOccupant(int minArea) { return Area / minArea; } } // Использовать параметризированный конструктор класса Building. class BuildingDemo { static void Main { Building house = new Building(2, 2500, 4); Building office = new Building(3, 4200, 25); Console.WriteLine("Максимальное количество человек в доме, \n" + "если на каждого должно приходиться " + 300 ,+ " кв. футов: " + house.MaxOccupant(300)); Console.WriteLine("Максимальное количество человек " + "в учреждении, \n" + "если на каждого должно приходиться " + 300 + " кв. футов: " + office.MaxOccupant (300)); } }

Результат выполнения этой программы оказывается таким же, как и в предыдущей ее версии.

Оба объекта, house и office, были инициализированы конструктором Building при их создании в соответствии с параметрами, указанными в этом конструкторе. Например, в строке Building house = new Building(2, 2500, 4);

конструктору Building передаются значения 2, 2500 и 4 при создании нового объек та. Следовательно, в копиях переменных экземпляра Floors, Area и Occupants объекта house будут храниться значения 2, 2500 и 4 соответственно. Еще раз об операторе new

Теперь, когда вы ближе ознакомились с классами и их конструкторами, вернемся к оператору new, чтобы рассмотреть его более подробно. В отношении классов общая форма оператора new такова: new имя_класса(список_аргументов)

где имякласса обозначает имя класса, реализуемого в виде экземпляра его объекта. А имякласса с последующими скобками обозначает конструктор этого класса. Если в классе не определен его собственный конструктор, то в операторе new будет исполь зован конструктор, предоставляемый в C# по умолчанию. Следовательно, оператор new может быть использован для создания объекта, относящегося к классу любого типа.

  • Читать дальше
  • 1
  • ...
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • ...

Ебукер (ebooker) – онлайн-библиотека на русском языке. Книги доступны онлайн, без утомительной регистрации. Огромный выбор и удобный дизайн, позволяющий читать без проблем. Добавляйте сайт в закладки! Все произведения загружаются пользователями: если считаете, что ваши авторские права нарушены – используйте форму обратной связи.

Полезные ссылки

  • Моя полка

Контакты

  • chitat.ebooker@gmail.com

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