Sobes.tech
Junior

C#-də hansı növ çevirmələr mövcuddur?

sobes.tech Süni İntellekt

AI-dan cavab

C#-da iki əsas növ tip çevirməsi mövcuddur: açıq və qapalı.

Qapalı (Implicit) tip çevirməsi

Avtomatik baş verir, kompilyator çevirmənin təhlükəsiz olduğundan əmin olduqda və məlumat itkisinə səbəb olmayacaqsa. Məsələn, kiçik diapazondan böyük diapazonda olan tipe.

// int-dən long-ə qapalı çevirmə
int i = 100;
long l = i;

Açıq (Explicit) tip çevirməsi

Kodda (tip) operatorunu göstərməyi tələb edir və çevirmə məlumat itkisinə və ya istisna atmağa səbəb ola bilər. Bu, böyük diapazondan kiçik diapazonda olan tipe və ya əlaqəsiz tiplər arasında çevirmə üçün lazımdır.

// double-dan int-ə açıq çevirmə
double d = 123.45;
int i = (int)d; // Onluq hissə atılır

// object-dən string-ə açıq çevirmə
object obj = "Hello";
string s = (string)obj;

// as və is operatorlarından istifadə
object objAs = "World";
string sAs = objAs as string; // Əgər çevirmə mümkün deyilsə null qaytarır
if (objAs is string) // Ob’ektin string tipində olub-olmadığını yoxlayır
{
    string sIs = (string)objAs;
}

Açıq çevirmə, asis müqayisəsi

Əməliyyat Təsviri Uğursuzluqda xəta
(Tip) ifadə Açıq çevirmə. Tipin dəqiq uyğunluğu tələb olunur. InvalidCastException
ifadə as Tip Tipə çevirməyə çalışır. Yalnız referens tiplər və null icazə verən tiplər üçün işləyir. null qaytarır
ifadə is Tip İfadənin göstərilən tipe çevrilə biləcəyini yoxlayır. Boolean dəyər (true/false)

Xüsusi çevirmələr

İnkişaf etdirici öz xüsusi açıq və qapalı çevirmə operatorlarını təyin edə bilər, implicitexplicit açar sözlərindən istifadə etməklə.

// Xüsusi qapalı çevirmə nümunəsi
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; }
}

// İstifadə
Inches inches = new Inches { Value = 10 };
Millimeters mm = inches; // Qapalı çevirmə
// Xüsusi açıq çevirmə nümunəsi
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) };
    }
}

// İstifadə
Pounds pounds = new Pounds { Value = 100 };
Kilograms kg = (Kilograms)pounds; // Açıq çevirmə