Sobes.tech
Junior

C# da qanday turdagi konvertatsiyalar mavjud?

sobes.tech AI

AIdan javob

C# da ikkita asosiy turdagi turini o‘zgartirish mavjud: ochiq va yopiq.

Yopiq (Implicit) tur o‘zgartirish

Avtomatik ravishda yuzaga keladi, agar kompilyator o‘zgartirish xavfsiz ekanligiga ishonch hosil qilsa va ma’lumotlarni yo‘qotmasligini ta’minlasa. Masalan, kichikroq diapazondagi turdan katta diapazondagi turga.

// int’dan long’ga yopiq o‘zgartirish
int i = 100;
long l = i;

Ochiq (Explicit) tur o‘zgartirish

Kodda (tur) operatorini ko‘rsatishni talab qiladi va ma’lumotlarni yo‘qotish yoki istisno chiqarishga olib kelishi mumkin bo‘lsa, foydalaniladi. Kattaroq diapazondagi turdan kichikroq diapazondagi turga yoki bog‘lanmagan turlar o‘rtasida o‘zgartirish uchun zarur.

// double’dan int’ga ochiq o‘zgartirish
double d = 123.45;
int i = (int)d; // O‘nlik qismi tashlab yuboriladi

// object’dan string’ga ochiq o‘zgartirish
object obj = "Hello";
string s = (string)obj;

// as va is operatorlaridan foydalanish
object objAs = "World";
string sAs = objAs as string; // Agar mumkin bo‘lmasa null qaytaradi
if (objAs is string) // Ob’ekt string turida ekanligini tekshiradi
{
    string sIs = (string)objAs;
}

Ochiq o‘zgartirish, as va is taqqoslamasi

Operatsiya Tavsifi Xato holati
(Tur) ifoda Ochiq o‘zgartirish. Turi aniq mos kelishi kerak. InvalidCastException
ifoda as Tur Turi o‘zgartirishga harakat qiladi. Faqat referens turlar va nullga ruxsat beradigan turlar uchun ishlaydi. null qaytaradi
ifoda is Tur Ifodani belgilangan turga o‘zgartirish mumkinligini tekshiradi. Boolean qiymat (true/false)

Maxsus o‘zgartirishlar

Dasturchi o‘zining maxsus ochiq va yopiq o‘zgartirish operatorlarini belgilashi mumkin, implicit va explicit kalit so‘zlarini ishlatib.

// Maxsus yopiq o‘zgartirish misoli
public class Inches
{
    public int Value { get; set; }
    public static implicit operator Millimeters(Inches i)
    {
        return new Millimeters { Value = i.Value * 25 };
    }
}

public class Millimeters
{
    public int Value { get; set; }
}

// Foydalanish
Inches inches = new Inches { Value = 10 };
Millimeters mm = inches; // Yopiq o‘zgartirish
// Maxsus ochiq o‘zgartirish misoli
public class Kilograms
{
    public int Value { get; set; }
}

public class Pounds
{
    public int Value { get; set; }
    public static explicit operator Kilograms(Pounds p)
    {
        return new Kilograms { Value = (int)(p.Value / 2.20462) };
    }
}

// Foydalanish
Pounds pounds = new Pounds { Value = 100 };
Kilograms kg = (Kilograms)pounds; // Ochiq o‘zgartirish