Merhaba,Bu yazımda bir çok dilde bulunan operator overloading özelliğinin C# ile nasıl yapılabileceğini anlatacağım. Operator overloading(operatörleri aşırı yükleme) metotları aşırı yüklemeye benzer bir yapıya sahiptir. Operatörleri aşırı yükleme ise C# ile kullandığımız ,-,*,/,%, ,– gibi operatörlerin bizim oluşturduğumuz class içinde nasıl davranacağını belirleyebildiğimiz bir kavramdır. Örneğin aşağıdaki kod bloğuna inceleyelim :int a = 10+5;
Burada iki adet int sayıyı topladık. Yani bizim burada yapacığımız iş operatörünün bizim yazdığımız class’ta daha farklı bir iş gerçekleştirebilmesidir. Ben burada örnek olarak C#’ta bulunmayan bir type’ın C#’a optimize edilmiş bir biçimini yazacağım. Bir karmaşık sayı sınıfı yazarak bunu programlarımızda nasıl kullanabileceğimizi anlatacağım. Örnek olarak aşağıdaki gibi bir class yazalım :class KarmasikSayi{private double reel { get; set; }private double sanal { get; set; }public KarmasikSayi(double reel, double sanal){this.reel = reel;this.sanal = sanal;}//Toplama operator overloadingpublic static KarmasikSayi operator +(KarmasikSayi sayi1, KarmasikSayi sayi2){return new KarmasikSayi(sayi1.reel + sayi2.reel, sayi1.sanal + sayi2.sanal);}//Çıkarma operator overloadingpublic static KarmasikSayi operator -(KarmasikSayi sayi1, KarmasikSayi sayi2){return new KarmasikSayi(sayi1.reel – sayi2.reel, sayi1.sanal – sayi2.sanal);}public override string ToString(){return String.Format(“{0} {1}i”, reel, sanal);}}
Bu class verilen iki adet double sayıyı yapıcı metot ile(KarmasikSayi(reel,sanal)) reel ve sanal isimli özelliğime atacayacaklar. Daha sonra bu iki sayıyı toplayığ ekrana uygun formatta verecek. Öncelikle bu sınıfı nasıl kullanabileceğimizi yazayım daha sonra sınıfımızın kod bloklarını açıklayacağım :KarmasikSayi s1 = new KarmasikSayi(10, 20);KarmasikSayi s2 = new KarmasikSayi(30, 40);Console.WriteLine(s1 + s2);
İlk önce s1 ve s2 isimli iki adet KarmasikSayi tipli birer nesne oluşturduk ve parametre olarak iki adet sayı gönderdik. Bu gönderdiğimiz sayılar KarmasikSayi sınıfının altındaki reel ve sanal özelliğine yazılmıştır. Daha sonra ben s1 s2 kısmında KarmasikSayi sınıfımda bulunan public static KarmasikSayi operator () metodunun çalışmasını sağlıyorum. Operator overloading’de önemli kurallar vardır. Bunlardan birinci yazılan metodun public ve static özelliklere sahip olması gerekmektedir. Genel olarak operatör tanımlama aşağıdaki gibidir :public static tip operator operator_tipi(params)
Burada tip olarak class tipi ve operator tipi olarakta +,-,*,/,++,–,% gibi operatorlerdir.