На этом шаге мы рассмотрим другие применения этого ключевого слова.
Ключевое слово this используется и в иных ситуациях. Например, при перегрузке конструкторов в классе ключевое слово this с круглыми скобками (и аргументами, если необходимо) используется для вызова одной версии конструктора в другой версии конструктора. Выражение вида this (аргументы) указывается через двоеточие после закрывающей круглой скобки в описании конструктора. Оно означает выполнение программного кода той версии конструктора, которая соответствует аргументам, указанным с ключевым словом this. Общий шаблон выглядит так:
public Конструктор(аргументы): this(аргументы) { // Команды в теле конструктора }
Для большей наглядности рассмотрим небольшой пример.
using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace pr89_1 { // Класс с перегрузкой конструкторов: class MyClass { // Целочисленные поля: public int alpha; public int bravo; // Конструктор с одним аргументом: public MyClass(int a) { // Сообщение в консольном окне: Console.WriteLine("Конструктор с одним аргументом"); // Значения полей: alpha = a; bravo = alpha; // Отображение значений полей: Console.WriteLine("Оба поля равны " + alpha); } // Конструктор с двумя аргументами: public MyClass(int a, int b) : this(a) { // Сообщение в консольном окне: Console.WriteLine("Конструктор с двумя аргументами"); // Значение второго поля: bravo = b; // Отображение значений полей: Console.WriteLine("Поля " + alpha + " и " + bravo); } // Конструктор без аргументов: public MyClass() : this(400, 500) { // Сообщение в консольном окне: Console.WriteLine("Конструктор без аргументов"); // Отображение значений полей: Console.WriteLine("Значения " + alpha + " и " + bravo); } } // Класс с главным методом: class Program { static void Main() { // Вызов конструктора с одним аргументом: MyClass A = new MyClass(100); Console.WriteLine(); // Вызов конструктора с двумя аргументами: MyClass B = new MyClass(200, 300); Console.WriteLine(); // Вызов конструктора без аргументов: MyClass C = new MyClass(); // Задержка: Console.ReadLine(); } } }
Ниже показано, как выглядит результат выполнения программы.
Рис.1. Результат выполнения программы
В примере описан класс MyClass с двумя целочисленными полями alpha и bravo. Кроме них в классе есть три версии конструктора: с одним аргументом, с двумя аргументами и без аргументов. Конструктор с одним аргументом простой: появляется сообщение о том, что у конструктора один аргумент, обоим полям присваиваются одинаковые значения (определяется аргументом конструктора), и присвоенное значение отображается в консольном окне. Команда
MyClass A = new MyClass(100);
Конструктор с двумя аргументами описан так, что сначала вызывается версия конструктора с одним аргументом (первый из двух аргументов, переданных конструктору с двумя аргументами), а затем появляется сообщение о том, что вызван конструктор с двумя аргументами, второму полю присваивается новое значение, и конечные значения полей отображаются в консольном окне. Пример использования конструктора с двумя аргументам и дается командой
MyClass B = new MyClass(200, 300);
Наконец, конструктор без аргументов описан так, что сначала выполняется код конструктора с двумя аргументами 300 и 400. Выполнение этого конструктора, как мы уже знаем, начинается с выполнения кода конструктора с одним аргументом. И только в самом конце выполняются команды, непосредственно описанные в теле конструктора без аргументов. Конструктор без аргументов используется при создании объекта командой
MyClass C = new MyClass();
На следующем шаге мы резюмируем все ранее сказанное по данной теме на предыдущих шагах.