Loading...

Структураны аныктоо. Структуранын обьектисин түзүү

Структура объектисин түзүү
Конструктор менен инициализация
Структураны колдонуу үчүн аны инициализациялоо керек. Структура объекттерин түзүүнү инициализациялоо үчүн, класстардагыдай, конструкторго жаңы оператор менен чакыруу колдонулат . Структуранын кодунда конструктор аныкталбаса да, анын жок дегенде бир конструктору бар - компилятор тарабынан түзүлгөн демейки конструктор. Бул конструктор эч кандай параметрлерди албайт жана демейки маанилери бар структуралык объектти түзөт.


@A@new структуранын_аты();@A@
Мисалы, демейки конструкторду колдонуп Person структурасынын объектисин түзөлү:


@A@

Person tom = new Person();  // конструктор чакыруу
// или так 
// Person tom = new();
 
tom.name = "Tom";   // name талаасында демейки боюнча маанини өзгөртүү
 
tom.Print();    // Аты: Tom  Жашы: 0
 
struct Person
{
    public string name;
    public int age;
 
    public void Print()
    {
        Console.WriteLine($"Имя: {name}  Возраст: {age}");
    }
}@A@
Бул учурда, Tом объект түзүлөт. Аны түзүү үчүн демейки конструктор чакырылат, ал өз талаалары үчүн демейки маанилерди орнотот. Сандык маалыматтар үчүн бул маани 0, андыктан талаа age0 маанисине ээ болот. саптар үчүн null бул маани эч кандай маанини билдирбейт. Бирок андан кийин, талаалар жеткиликтүү болсо (жана бул учурда аларда өзгөртүүчү бар, анткени public алар жеткиликтүү), биз алардын маанилерин өзгөртө алабыз. Ошентип, бул жерде талаа name "Том" сабы дайындалган. Демек, ыкманы ишке ашырууда, Print() биз төмөнкү консолдук натыйжаны алабыз:

@T@Аты: Том Жашы: 0@T@

 

Түз талааны инициализациялоо


Эгерде структуранын бардык талаалары жеткиликтүү болсо ( жалпы өзгөрткүчү бар 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 void Print()
    {
        Console.WriteLine($"Аты: {name} Жашы: {age}");
    }
}

class Program
{
    static void Main()
    {
        Person tom = new Person("Sam", 37);
        tom.Print(); 
    }
}@A@

 

@T@ Аты: Sam Жашы: 37 @T@


Демейки талаа инициализациясы


Белгилей кетсек, C# 10дон баштап түзүмдүн талааларын аныктоодо түз инициализациялоого болот (C# 10го чейин бул мүмкүн эмес болчу):

@A@using System;

struct Person
{
    public string name;
    public int age;

    public Person(string name, int age)
    {
        this.name = name;
        this.age = age;
    }

    public void Print() => Console.WriteLine($"Имя: {name}  Возраст: {age}");
}

class Program
{
    static void Main()
    {
        Person tom = new Person("Tom", 1);
        tom.Print(); // Выводит: Имя: Tom  Возраст: 1
    }
}@A@

@T@Имя: Tom  Возраст: 1@T@


Бирок, бул учурда да, демейки маанилерге карабастан, биз бул маанилерди колдонгубуз келсе, конструкторду ачык аныктап, чакырышыбыз керек.