Sobes.tech
Junior

C# да кандай түрдөгү түрлөрдү түрлөрү бар?

sobes.tech AI

AIден жооп

C# тилде эки негизги түрдүү түргө түрмө бар:

  1. Ачык түрмө (Explicit conversion): (тип) операторун колдонуу талап кылынат. Бул автоматтык түрдө коопсуз эмес түрмөдө колдонулат, мисалы, негизги класстен туундулук класска же чоң тактыктагы типтен кичине тактыктагы типке (мисалы, doubleдан int) которууда. Бул маалымат жоготууга же иштөө учурунда катага алып келиши мүмкүн (InvalidCastException).

    // `double`дан `int`ке ачык түрмө
    double d = 123.45;
    int i = (int)d; // i 123 болот
    
    // Объектти конкреттүү түргө ачык түрмө
    object obj = "Hello";
    string s = (string)obj; // s "Hello" болот
    
  2. Жасырын түрмө (Implicit conversion): Компилятор автоматтык түрдө ишке ашырат, эгер которуу белгилүү жана коопсуз болсо, яғни маалымат жоготуу жок. Мисалы, intтен doubleга которуу.

    // `int`тен `double`га жасалган жасырын түрмө
    int x = 10;
    double y = x; // y 10.0 болот
    
    // Төмөнкү классды жогорку класска которуу
    class Base {}
    class Derived : Base {}
    
    Derived derivedObj = new Derived();
    Base baseObj = derivedObj; // Жасырын түрмө
    

Мындан тышкары, as жана is операторлору да бар, алар да түрмөдө колдонулат, бирок өзгөчөлүктөрү менен:

  • as операторы: Түрмөдө мүмкүн болсо, ишке ашырат жана null кайтарат, эгер ишке ашыруу мүмкүн болбосо. InvalidCastException исключениин чыгарбайт. Бул оператор сылтамалуу типтер жана Nullable типтери үчүн гана колдонулат.

    // `as` операторун колдонуу
    object obj2 = "World";
    string s2 = obj2 as string; // s2 "World" болот
    
    object obj3 = 123;
    string s3 = obj3 as string; // s3 null болот
    
  • is операторы: Объект белгилүү бир типтин же анын туундусунун экземпляри экенин текшерет. true же false кайтарат. Соңку C# версияларында pattern matching менен колдонулуп, бир эле учурда текшерүү жана түрмөдө колдонуу мүмкүн:

    // `is` оператору менен типти текшерүү
    object obj4 = "Example";
    if (obj4 is string)
    {
        // Эгер объект жол болсо, аракеттер
    }
    
    // Pattern matching менен `is` колдонуу
    if (obj4 is string str)
    {
        // str бул жерде жол катары жеткиликтүү
    }