C# Operatör Overloading

C# dilinde “operatör aşırı yükleme” (operator overloading), bir sınıfın özel işlemleri ve operatörleri özelleştirmek amacıyla kullanılan bir nesne yönelimli programlama kavramıdır. C# dilinde, bazı temel operatörlerin sınıf türlerine uygulanabilirliği sağlanır ve bu operatörlerin davranışlarını sınıflarınıza özgü şekillerde tanımlamanıza olanak tanır.

Operatör aşırı yüklemesi, aşağıdaki operatörler için özel davranışları tanımlamanıza olanak tanır:

  • Aritmetik operatörler: +, -, *, /, % vb.
  • Karşılaştırma operatörleri: ==, !=, <, >, <=, >= vb.
  • Mantıksal operatörler: &&, ||, ! vb.
  • Bitwise operatörler: &, |, ^, ~, <<, >> vb.
  • Atama operatörleri: =, +=, -=, *=, /=, %= vb.

Operatör aşırı yükleme, sınıfınızın türünün özel gereksinimlerine veya iş mantığına uyan bir şekilde bu operatörleri kullanmanıza olanak tanır. Örneğin çalışan adlı bir sınıfımız olsun ve o sınıf üzerinden iki adet nesne üretelim.

    public class Calisan
    {
        string calisanAdi;
        int yaptigiSatis;

        public Calisan(string calisanAdi, int yaptigiSatis)
        {
            this.calisanAdi = calisanAdi;
            this.yaptigiSatis = yaptigiSatis;
        }
    }

Yukarıda ki sınıfımız üzerinden nesne oluşturalım ve o nesneler üzerinden bir toplama işlemi gerçekleştirelim.

    internal class Program
    {
        static void Main(string[] args)
        {
            Calisan calisan1 = new Calisan("Fatih", 10);
            Calisan calisan2 = new Calisan("Beyazıt", 5);

            Calisan toplamSatis = calisan1 + calisan2;
        }
    }

Yukarıda ki kodu yazdığınızda bir derleme zamanı hatası alırsınız. Bunun sebebi + operatörünün bu iki tip üzerinde ne yapacağını bilmemesinden kaynaklanır. Gelin şimdi + operatörünü aşırı yükleyelim ve artık ne yapması gerektiğini kendisine öğretelim.

    public class Calisan
    {
        string calisanAdi;
        int yaptigiSatis;

        public Calisan(string calisanAdi, int yaptigiSatis)
        {
            this.calisanAdi = calisanAdi;
            this.yaptigiSatis = yaptigiSatis;
        }

        public override string ToString()
        {
            return this.calisanAdi + " " + this.yaptigiSatis + " adet sipariş";
        }

        public static Calisan operator +(Calisan clsn1, Calisan clsn2)
        { 
            int toplamSatis = clsn1.yaptigiSatis + clsn2.yaptigiSatis;
            return new Calisan("ToplamSatis", toplamSatis);
        }
    }

Program.cs

        static void Main(string[] args)
        {
            Calisan calisan1 = new Calisan("Fatih", 10);
            Calisan calisan2 = new Calisan("Beyazıt", 5);

            Calisan toplamSatis = calisan1 + calisan2;

            Console.WriteLine(toplamSatis);
        }

Sonuç:

ToplamSatis 15 adet sipariş