Структуранын конструктору
Класс сыяктуу эле, структура конструкторлорду аныктай алат. Мисалы, Person структурасына конструктор кошолу:
@A@using System;
struct Person
{
public string name;
public int age;
public Person(string name, int age)
{
this.name = name;
this.age = age;
}
public Person(string name) : this(name, 1)
{
}
public void Print() => Console.WriteLine($"Имя: {name} Возраст: {age}");
}
class Program
{
static void Main()
{
Person tom = new Person();
Person bob = new Person("Bob");
Person sam = new Person("Sam", 25);
tom.Print();
bob.Print();
sam.Print();
}
}@A@
@T@Имя: Возраст: Bob Возраст: 1
Sam Возраст: 25@T@
Бул учурда, Person структурасы эки параметри бар конструкторду аныктайт, алар үчүн демейки маанилер берилген. Бирок, биринчи структуралык объектинин түзүлүшүнө көңүл буруңуз:
@A@Person tom = new(); //демейки параметрлери жок конструктор дагы эле колдонулат
tom.Print(); // !!!! Имя: Возраст: 0@A@
Демейки конструктор дагы эле бул жерде колдонулат, ал эми калган эки структуралык өзгөрмөлөр ачык аныкталган конструктордун жардамы менен инициализацияланат.
Бирок, C# 10 менен баштап, биз өзүбүздүн параметрсиз конструкторду аныктай алабыз:
@A@Person tom = new();
tom.Print(); // Имя: Tom Возраст: 37
struct Person
{
public string name;
public int age;
public Person()
{
name = "Tom";
age = 37;
}
public void Print() => Console.WriteLine($"Имя: {name} Возраст: {age}");
}@A@
Белгилей кетсек, C# 11ге чейин структуранын конструкторун аныктоодо андагы структуранын бардык талааларын C# 11ден баштап инициализациялоо керек болчу, мунун кереги жок.
Эгерде биз башка сандагы параметрлери бар конструкторлорду чакырышыбыз керек болсо, анда класстардагыдай эле, аларды чынжыр менен чакыра алабыз:
@A@Person tom = new();
Person bob = new("Bob");
Person sam = new("Sam", 25);
tom.Print(); // Аты-жөнү: Том Жашы: 1
bob.Print(); // Аты-жөнү: Bob Жашы: 1
sam.Print(); // Аты-жөнү: SamЖашы: 25
struct Person
{
public string name;
public int age;
public Person() : this("Tom")
{ }
public Person(string name) : this(name, 1)
{ }
public Person(string name, int age)
{
this.name = name;
this.age = age;
}
public void Print() => Console.WriteLine($"Имя: {name} Возраст: {age}");
}@A@
Программанын консолдук натыйжасы:
@T@Аты-жөнү: Том Жашы: 1
Аты-жөнү: Bob Жашы: 1
Аты-жөнү: Sam Жашы: 25@T@