ТОР 5 статей: Методические подходы к анализу финансового состояния предприятия Проблема периодизации русской литературы ХХ века. Краткая характеристика второй половины ХХ века Характеристика шлифовальных кругов и ее маркировка Служебные части речи. Предлог. Союз. Частицы КАТЕГОРИИ:
|
Создание объектов. Конструкторы. Примеры использования.Конструкторпредназначен для инициализации объекта. Он вызывается автоматически при создании объекта класса с помощью операции new. Имя конструктора совпадает с именем класса.Ниже перечислены свойства конструкторов. - Конструкторне возвращает значение. - Класс может иметь несколько конструкторов с разными параметрами для разных видов инициализации. - Если программист не указал ни одного конструктора или какие-то поля не были инициализированы, полям значимых типов присваивается нуль, полям ссылочных типов — значение null. - Конструктор, вызываемый без параметров, называется конструктором по умолчанию. В листинге 1 начальные значения полей класса заданы при описании класса. Если же при создании объектов требуется присваивать полю разные значения, это следует делать в конструкторе. В листинге 2 в класс Prim добавлен конструктор, а поля сделаны закрытыми. В программе создаются два объекта с различными значениями полей. Листинг 2- Класс с конструктором using System; namespace ConsoleApplication1 ( class Prim { рublic Prim(int a, double у) // конструктор с параметрами { this.a = а; this.y = у; } рublic double Getу() // метод получения поля у { return y; } int a; double у; }
class Class1 { static void Main() { Prim a = new Prim(10, 0.01); // вызов конструктора Соnsole.WriteLine(a.Gety()); // результат: 0,01 Prim b = new Prim(1. 2.2): // вызов конструктора Соnsole.WriteLine(b.Gety()); // результат: 2,2 } } } В классе, чтобы обеспечить возможность инициализации объектов разными способами, можно иметь несколькоконструкторов, но при этом они должны иметь разные сигнатуры. Листинг 3- Класс с 2-мя конструкторами class Prim { рublic Prim(int а) // конструктор 1 { this.a = a; this.y = 0.002; }
public Prim(double y) // конструктор 2 { this.a = 1; this.y = y; } ... } ... Prim x = new Prim(300); // вызов конструктора 1 Prim y = new Prim(5.71); // вызов конструктора 2
Если один из конструкторов выполняет какие-либо действия, а другой должен делать то же самое плюс еще что-нибудь, удобно вызвать первый конструктор из второго. Для этого используется уже известное ключевое слово this, например: class Prim { рublic Prim(int а) // конструктор 1 { this.a = a; } рublic Prim(int a, double y): this(а) // вызов конструктора 1 { this.y = y; } } Конструкция, находящаяся после двоеточия, называется инициализатором, то есть тем кодом, который исполняется до начала выполнения тела конструктора. Вспомним, что все классы в С# имеют общею предка — класс object. Конструктор любого класса, если не указан инициализатор, автоматически вызывает конструктор своего предка. Это можно сделать и явным образом с помощью ключевого слова basе, обозначающего конструктор базового класса. Таким образом, первый конструктор из предыдущего примера можно записать и так: рublic Prim (int a): base() // конструктор 1 { this.а = а; } Конструктор базового класса вызывается явным образом в тех случаях, когда ему требуется передать параметры. До сих пор речь шла о конструкторах экземпляра. Существует второй тип конструкторов — статические конструкторы, или конструкторы класса. Конструктор экземпляра инициализирует данные экземпляра, конструктор класса — данные класса. Статический конструктор не имеет параметров, его нельзя вызвать явным образом. Система сама определяет момент, в который требуется его выполнить. Гарантируется только, что это происходит до создания первого экземпляра объекта и до вызова любого статического метода. Некоторые классы содержат только статические данные, и, следовательно, создавать экземпляры таких объектов не имеет смысла. В С# введена возможность описывать статический класс, то есть класс с модификатором static. Экземпляры такого класса создавать запрещено, и кроме того, от него запрещено наследовать. Все элементы такого класса должны явным образом объявляться с модификатором static (константы и вложенные типы классифицируются как статические элементы автоматически). Конструктор экземпляра для статического класса задавать, естественно, запрещается. Листинг 3 - Статический класс using System; namespace ConsoleApplication1 { static class D { static int a = 200; static double b = 0.002;
рublic static void Print () { Сonsole.WriteLine("а = " + а); Сonsole.WriteLine("b = " + b); } } class Class1 { static void Main() { D.Print(); } } } Не нашли, что искали? Воспользуйтесь поиском:
|