Home / Bilgisayar Mühendisliği / Nesne Yönelimli Programlama / Explicit ve Implicit Operatörler

Explicit ve Implicit Operatörler

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.

  1. Explicit (Bilinçli Dönüşüm)
  2. 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.

Şekil-1

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.

Etiketlendi:

Cevap bırakın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir