“+” operatörü sayısal ifadelerde toplama işlemi, metinsel ifadelerde ise birleştirme işlemi yapar. Bir sınıftın iki nesnesini “+” operatörüyle işleme sokarsak C# derleyicisi hata verir. Hata vermesinin sebebi ne yapacağını bilmemesidir. Burada operatörün aşırı yüklenmesi konusu devreye girer. Operatörün aşırı yüklenmesi o operatöre farklı bir görev bir anlam daha yüklemek anlamına gelir.
Aşağıdaki örnekte “+” operatörüne Personel classından oluşturulmuş nesnelerin maaşlarını toplama görevini , “%” operatörüne de Personel classından oluşturulmuş nesnelerin maaşlarını kıyaslama görevini veriyoruz.
Operatörleri aşırı yüklerken dikkat edilecek hususlar.
- public ve static olarak belirlenmelidir.
- operator anahtar sözlücü ve operatör işareti kullanılmalıdır.
- karşılaştırma işaretini aşırı yükleyecekseniz zıttını da aşırı yüklemeniz gerekir.
& , | ve ! operatörlerinin aşırı yüklenmesi önceki uygulamar ile aynıdır. Fakat && ve || operatörlerinin aşırı yüklenmesi için bazı ön koşullar gereklidir.
- & ve | operatörleri aşırı yüklenmiş olmalıdır.
- True ve False operatörleri aşırı yüklenmiş olmalıdır.
- & ve | operatörlerinin parametreleri ve geri dönüş tipleri aynı sınıf tipinde olmalıdır.
Bu ön koşullar yerine getirildiği takdirde && ve || operatörleri kendiliğinden aşırı yüklenmiş olur.
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace ConsoleApp3 { class Program { static void Main(string[] args) { Personel kisi1 = new Personel(); kisi1.ad = "Cagatay"; kisi1.soyad = "KIZILTAN"; kisi1.fakulte = "Mühendislik"; kisi1.unvan = "Doc.dr"; kisi1.maas = 5500; Personel kisi2 = new Personel(); kisi2.ad = "Hüseyin"; kisi2.soyad = "KIZILTAN"; kisi2.fakulte = "Eğitim"; kisi2.unvan = "Doc.dr"; kisi2.maas = 3000; int toplam = kisi1 +kisi2; Console.WriteLine("Maaslari toplami : {0}", toplam); string kiyas = kisi1 % kisi2; Console.WriteLine(kiyas); Console.ReadKey(); } } class Personel { public string ad, soyad, fakulte, unvan; public int maas; // + operatörü için yeni bir anlam belirlenmiştir ; iki adet nesne alır, bunlar operatörün sağ ve sol operantlarıdır ve bunların maaşlarını toplar. public static int operator +(Personel p1,Personel p2) { return p1.maas + p2.maas; } // % operatörü için yeni bir anlam belirlenmiştir ; iki adet nesne alır, bunlar operatörün sağ ve sol operantlarıdır ve bunların maaşlarını kıyaslar. public static string operator %(Personel p1, Personel p2) { if (p1.maas > p2.maas) return "p1 fazla kazaniyor"; else if (p1.maas < p2.maas) return "p2 fazla kazaniyor"; else return "ikisi de eşit kazaniyor"; } } }