Junior
C#'ta hangi tür dönüşümleri vardır?
sobes.tech yapay zeka
AI'dan gelen yanıt
C#'ta iki temel tür dönüşümü türü vardır: açık ve kapalı.
Kapalı (İmplicit) Tür Dönüşümü
Derleyicinin dönüşümün güvenli olduğundan emin olduğu ve veri kaybına yol açmayacağından emin olduğu durumlarda otomatik olarak gerçekleşir. Örneğin, daha küçük aralıkta bir türden daha büyük aralıkta bir türe.
// int'ten long'a kapalı dönüşüm
int i = 100;
long l = i;
Açık (Explicit) Tür Dönüşümü
Kodda dönüşüm operatörünü ((tip)) belirtmeyi gerektirir ve veri kaybına yol açabilir veya istisna fırlatabilir. Daha büyük aralıkta bir türden daha küçük aralıkta bir türe veya ilgisiz türler arasında dönüşümde gereklidir.
// double'dan int'e açık dönüşüm
double d = 123.45;
int i = (int)d; // Ondalık kısım atılır
// object'ten string'e açık dönüşüm
object obj = "Hello";
string s = (string)obj;
// as ve is operatörleri kullanılarak dönüşüm
object objAs = "World";
string sAs = objAs as string; // Dönüşüm mümkün değilse null döner
if (objAs is string) // Nesnenin string türünde olup olmadığını kontrol eder
{
string sIs = (string)objAs;
}
Açık dönüşüm, as ve is karşılaştırması
| İşlem | Açıklama | Hata durumu |
|---|---|---|
(Tip) ifade |
Açık dönüşüm. Türün tam uyumu gerekir. | InvalidCastException |
ifade as Tip |
Türü dönüştürmeye çalışır. Sadece referans türleri ve null izin verenler için çalışır. | null döner |
ifade is Tip |
İfadenin belirtilen türe dönüştürülüp dönüştürülemeyeceğini kontrol eder. | Boolean değer (true/false) |
Özelleştirilmiş dönüşümler
Geliştirici, kendi özel açık ve kapalı dönüşüm operatörlerini tanımlayabilir, implicit ve explicit anahtar kelimelerini kullanarak.
// Özelleştirilmiş kapalı dönüşüm örneği
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; }
}
// Kullanım
Inches inches = new Inches { Value = 10 };
Millimeters mm = inches; // Kapalı dönüşüm
// Özelleştirilmiş açık dönüşüm örneği
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) };
}
}
// Kullanım
Pounds pounds = new Pounds { Value = 100 };
Kilograms kg = (Kilograms)pounds; // Açık dönüşüm