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 монда юл буларак кулланыла
    }