Operatör Overloading işlemini daha önceki konumuzda yapmıştık. Şimdi de class yapımız için veri dönüşümünü anlatalım. İki türlü dönüşüm operatörü anlatacağım.
- Explicit (Bilinçli Dönüşüm)
- Implicit (Bilinçsiz Dönüşüm)
NOT: Bilinçsiz dönüşüm tanımı yaparsak, bu bilinçli dönüşümleride kapsayacağı için implicit dönüşümün örneğini önce vereceğim.
Bir kedi sınıfı tanımlayalım
public abstract class kedi
{
public string adi { get; set; }
public double fiyat { get; set; }
}Standart bir kedi tanımlayalım
public class standartKedi
{
public string adi { get; set; }
public double fiyat { get; set; }
public standartKedi Kedi() {
return new standartKedi() { adi="kedi", fiyat=10.0 } ;
}
}Explicit ile İran Kedisi Fiyatı Tanımlayalım
public class iranKredisi : kedi
{
public static explicit operator iranKredisi(standartKedi Kedi)
{
return new iranKredisi
{
adi = "İran Kredisi",
fiyat = Kedi.fiyat + 250
};
}
}Implicit ile İran Kedisi Fiyatı Tanımlayalım
public class iranKredisi : kedi
{
public static implicit operator iranKredisi(standartKedi Kedi)
{
return new iranKredisi
{
adi = "İran Kredisi",
fiyat = Kedi.fiyat + 250
};
}
}Yukarıdaki işlemler incelendiği zaman işlemlerin birisi bilinçi diğeri ise bilinçsiz bir şekilde tanımlanmıştır. Peki bunun bize ne gibi bir yararı var diye düşünebilirsiniz. Bunun bize yararı bu operatörler kullanılırken kullanımına izin verilip verilmemesidir.

Yukarıdaki işlemlerde İran Kedisi operatör olarak eğer implicit olarak tanımlanırsa, standart kediden dönüşüm yapabilirsiniz ancak explicit olarak tanımlanırsa Şekil-1’de de görüldüğü gibi İran Kedisi standart kedi ile dönüşümü kabul etmez.
Eğer explicit operatör işlemi yapılmış bir dönüşüm isteniyorsa cast yapılması zorunludur. Örnek vermek gerekirse;
class Program
{
static void Main(string[] args)
{
standartKedi s = new standartKedi();
iranKredisi i = new iranKredisi();
i = (iranKredisi)s;
}
}Hiçbir operatör tanımı yapılmamışsa cast ile de dönüşüm yapılamaz.







