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ə, as və is 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, implicit və explicit 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ə