Вызов this
В объявлении конструктора после списка параметров
пишут двоеточие и this с аргументами для
другого конструктора этого типа. Так переносят
общую инициализацию в один метод и избегают
дублирования кода. Вызов this должен быть
первой инструкцией в теле конструктора, если он
есть.
Синтаксис
public Имя() : this(значениеПоУмолчанию)
{
}
public Имя(тип param)
{
// общая инициализация
}
Пример
Давайте направим конструктор без параметров в конструктор с аргументом:
using System;
class Line
{
public string Text;
public Line() : this("abcde")
{
}
public Line(string text)
{
Text = text;
}
}
class Program
{
static void Main()
{
var line = new Line();
Console.WriteLine(line.Text);
}
}
Результат выполнения кода:
"abcde"
Пример
Давайте построим цепочку из трёх конструкторов:
using System;
class Triple
{
public int A;
public int B;
public int C;
public Triple() : this(1)
{
}
public Triple(int a) : this(a, 2)
{
}
public Triple(int a, int b) : this(a, b, 3)
{
}
public Triple(int a, int b, int c)
{
A = a;
B = b;
C = c;
}
}
class Program
{
static void Main()
{
var triple = new Triple();
Console.WriteLine($"{triple.A} {triple.B} {triple.C}");
}
}
Результат выполнения кода:
1 2 3
Пример
Давайте передадим одну константу через this
из перегрузки с меньшим числом параметров:
using System;
class Code
{
public string Value;
public Code() : this("12345")
{
}
public Code(string value)
{
Value = value;
}
}
class Program
{
static void Main()
{
var fromDefault = new Code();
var fromArg = new Code("abcde");
Console.WriteLine(fromDefault.Value);
Console.WriteLine(fromArg.Value);
}
}
Результат выполнения кода:
"12345"
"abcde"
Смотрите также
-
вызов base,
который делегирует инициализацию базовому классу -
конструктор,
к которому сводят общую логику через this -
первичный конструктор,
который задаёт параметры в заголовке типа -
ключевое слово
class,
где объявляют перегруженные конструкторы