Loading...

Структуранын конструктору

Класс сыяктуу эле, структура конструкторлорду аныктай алат. Мисалы, 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@