Конструкторы, инициализаторы и деконструкторы
Создание конструкторов
Мы сами можем определить свои конструкторы.
Как правило, конструктор выполняет инициализацию объекта.
При этом если в классе определяются свои конструкторы, то он лишается конструктора по умолчанию.
На уровне кода конструктор представляет метод, который называется по имени класса, который может иметь параметры, но для него не надо определять возвращаемый тип.
Например, определим в классе Person простейший конструктор:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | Person tom = new Person(); // Создание объекта класса Persontom.Print(); // Имя: Tom Возраст: 37class Person // имя класса{ public string name; public int age; public Person() // имя конструктора { Console.WriteLine("Создание объекта Person"); name = "Tom"; age = 37; } public void Print() // имя метода { Console.WriteLine($"Имя: {name} Возраст: {age}"); }} |
Итак, здесь определен конструктор, который выводит на консоль некоторое сообщение и инициализирует поля класса.
1 2 3 4 5 6 | public Person(){ Console.WriteLine("Создание объекта Person"); name = "Tom"; age = 37;} |
Конструкторы могут иметь модификаторы, которые указываются перед именем конструктора. Так, в данном случае, чтобы конструктор был доступен вне класса Person, он определен с модификатором public.
Определив конструктор, мы можем вызвать его для создания объекта Person:
1 | Person tom = new Person(); // Создание объекта Person |
В данном случае выражение Person() как раз представляет вызов определенного в классе конструктора (это больше не автоматический конструктор по умолчанию, которого у класса теперь нет).
Соответственно при его выполнении на консоли будет выводиться строка "Создание объекта Person"
Подобным образом мы можем определять и другие конструкторы в классе. Например, изменим класс Person следующим образом:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | Person tom = new Person(); // вызов 1-ого конструктора без параметровPerson bob = new Person("Bob"); //вызов 2-ого конструктора с одним параметромPerson sam = new Person("Sam", 25); // вызов 3-его конструктора с двумя параметрамиtom.Print(); // Имя: Неизвестно Возраст: 18bob.Print(); // Имя: Bob Возраст: 18sam.Print(); // Имя: Sam Возраст: 25class Person { public string name; public int age; public Person() { name = "Неизвестно"; age = 18; } // 1 конструктор public Person(string n) { name = n; age = 18; } // 2 конструктор public Person(string n, int a) { name = n; age = a; } // 3 конструктор public void Print() { Console.WriteLine($"Имя: {name} Возраст: {age}"); }} |
Теперь в классе определено три конструктора, каждый из которых принимает различное количество параметров и устанавливает значения полей класса. И мы можем вызвать один из этих конструкторов для создания объекта класса.
Консольный вывод данной программы:
Имя: Неизвестно Возраст: 18 Имя: Bob Возраст: 18 Имя: Sam Возраст: 25
Стоит отметить, что начиная с версии C# 9 мы можем сократить вызов конструктора, убрав из него название типа:
1 2 3 | Person tom = new (); // аналогично new Person();Person bob = new ("Bob"); // аналогично new Person("Bob");Person sam = new ("Sam", 25); // аналогично new Person("Sam", 25); |
Консольный вывод данной программы:
Комментариев нет:
Отправить комментарий