Sobes.tech
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