Sobes.tech
Junior

C# da qanday turdagi konvertatsiya turlari mavjud?

sobes.tech AI

AIdan javob

C# tilida asosiy ikkita turdagi konvertatsiya mavjud:

  1. Aniq konvertatsiya (Explicit conversion): (tur) operatoridan foydalanishni talab qiladi. Bu, kompilator avtomatik ravishda xavfsiz tarzda konvertatsiya qilolmaganda, masalan, asosiy sinfdan voris sinfga yoki yuqori aniqlikdagi turdan pastroq aniqlikdagi turga (masalan, double dan int) o'tkazishda qo'llaniladi. Bu ma'lumotlarning yo'qolishi yoki ish vaqtida xatolik (InvalidCastException) bilan yakunlanishi mumkin.

    // double dan int ga aniq konvertatsiya
    double d = 123.45;
    int i = (int)d; // i 123 ga teng bo'ladi
    
    // Ob'ektni ma'lum bir turga konvertatsiya qilish
    object obj = "Hello";
    string s = (string)obj; // s "Hello" ga teng bo'ladi
    
  2. Noma'lum konvertatsiya (Implicit conversion): Kompilator tomonidan avtomatik ravishda amalga oshiriladi, agar konvertatsiya ma'lum va xavfsiz bo'lsa, ya'ni ma'lumotlar yo'qotilmaydi. Masalan, int dan double ga o'tkazish.

    // int dan double ga noma'lum konvertatsiya
    int x = 10;
    double y = x; // y 10.0 ga teng bo'ladi
    
    // Voris sinfni asosiy sinfga konvertatsiya qilish
    class Base {}
    class Derived : Base {}
    
    Derived derivedObj = new Derived();
    Base baseObj = derivedObj; // Noma'lum konvertatsiya
    

Shuningdek, as va is operatorlari ham tur konvertatsiyasiga tegishli, lekin o'ziga xos xususiyatlarga ega:

  • as operatori: Mümkin bo'lsa, turga konvertatsiya qiladi va muvaffaqiyatsiz bo'lsa null qaytaradi. InvalidCastException xatosini keltirib chiqarmaydi. Faqat referens turlar va Nullable turlar bilan ishlatiladi.

    // `as` operatoridan foydalanish
    object obj2 = "World";
    string s2 = obj2 as string; // s2 "World" ga teng bo'ladi
    
    object obj3 = 123;
    string s3 = obj3 as string; // s3 null bo'ladi
    
  • is operatori: Ob'ekt ma'lum bir tur yoki undan voris bo'lgan tur ekanligini tekshiradi. true yoki false qaytaradi. C# ning so'nggi versiyalarida pattern matching bilan birga ishlatilishi mumkin, bu bilan tekshirish va konvertatsiya bir vaqtning o'zida amalga oshiriladi.

    // `is` operatoridan tur tekshirish uchun foydalanish
    object obj4 = "Example";
    if (obj4 is string)
    {
        // Ob'ekt string bo'lsa, bajariladigan amallar
    }
    
    // Pattern matching bilan `is` ishlatish
    if (obj4 is string str)
    {
        // str bu yerda string sifatida mavjud
    }