C# ile kullanıcı tanımlı tip geliştirmek ve Operator Overloading
Yazar: Kerem Bekman | Kategori: C#
C# veya .NET Framework çatısı altındaki herhangi bir dilde, kendi kullanım alanınıza özel tipler üretebilir. Size özel tipi operatör işlemlerine uyarlayabilirsiniz.
Bu çalışmamız için Nesne Yönelimli Programlamlarının en temel özelliklerinden olan “Constructor Overloading” özelliğini sık kullanıcaz. Makale öncesine Constructor Overloading için bu adrese göz atmanızı öneririm.
Kendimize özel yapacağımız tip rasyonel sayılar ve kendi işlemlerini destekleyen bir tip olacak.
Yapabileceğimiz işlemleri kısaca özetlersek
-
ras r1 = new ras("1/2");
-
// String ile Rasyonel Sayı Oluşturabilelim
-
-
ras r2 = new ras(6,8);
-
// Int ile Rasyonel Sayı Oluşturabilelim
-
-
ras r3 = new ras();
-
// Ve Değer atamadan tanımlayabilelim..
-
-
//Değer atama işlemi
-
r3.pay = 4;
-
r3.payda = 5;
-
-
ras r4 = r1 + r2; // Operator Overloading
-
r4.topla("1/5"); // String ile özel toplama
-
r4.topla(1, 2); // İnt ile Özel toplama
-
r4.sadelestir(); // Sadeleştirme
-
-
MessageBox.Show(r4.Goster()); // Rasyonel sayi gösterimi..
Hemen Object sınıfından türemiş “ras” adlı bir sınıf yaratıyoruz..
-
public class ras
-
{
-
public int pay;
-
public int payda;
-
-
public ras()
-
{
-
this.pay = 0;
-
this.payda = 0;
-
}
-
-
}
Şimdi ras r2 = new ras(6,8); satırındaki yapıcı fonksiyonunu yaratıyoruz.
-
public class ras
-
{
-
public int pay;
-
public int payda;
-
-
public ras()
-
{
-
this.pay = 0;
-
this.payda = 0;
-
}
-
public ras(int a, int b)
-
{
-
this.pay = a;
-
this.payda = b;
-
}
-
-
}
Hemen ardından String ile rasyonel sayıyı oluşturabilmek için 3. ek yapıcı fonksiyonumuzu kodlayalım.
ras r1 = new ras(”1/2″);
-
public class ras
-
{
-
public int pay;
-
public int payda;
-
-
public ras()
-
{
-
this.pay = 0;
-
this.payda = 0;
-
}
-
public ras(int a, int b)
-
{
-
this.pay = a;
-
this.payda = b;
-
}
-
public ras(string veri)
-
{
-
int orta = veri.IndexOf("/");
-
// Bölmek için "/" karakterinin indisini alıyoruz.
-
-
int uzunluk = veri.Length; //Verinin uzunluğu
-
-
string payS = veri.Substring(0, orta);
-
//Verinin "/" karakterine kadar ki kısmını payS stringine atıyoruz.
-
-
string paydaS = veri.Substring(orta + 1, uzunluk – orta – 1);
-
//Aynı "/" karakterinden bir sonkraki karakterden başlayarak son karaktere kadar ki kısmınıda paydaS eşitliyoruz.
-
-
//Ve bulduğumuz değerleri Integer’a çevirip pay ve paydaya atıyoruz.
-
this.pay = System.Convert.ToInt32(payS);
-
this.payda = System.Convert.ToInt32(paydaS);
-
}
-
-
}
Sınıfa özel özellikler eklemek için yukarıdaki parçalama işlemini private bir fonksiyon olarak yazıp diğer özelliklerde fonksiyonel olarak parçalayabilirsiniz.
Örnek özellik olarak topla() fonksiyonunu yapıyoruz
-
public class ras
-
{
-
public int pay;
-
public int payda;
-
private string payS;
-
private string paydaS;
-
private int orta;
-
private int uzunluk;
-
-
public ras()
-
{
-
this.pay = 0;
-
this.payda = 0;
-
}
-
public ras(int a, int b)
-
{
-
this.pay = a;
-
this.payda = b;
-
}
-
public ras(string veri)
-
{
-
orta = veri.IndexOf("/");
-
// Bölmek için "/" karakterinin indisini alıyoruz.
-
-
uzunluk = veri.Length; //Verinin uzunluğu
-
-
payS = veri.Substring(0, orta);
-
//Verinin "/" karakterine kadar ki kısmını payS stringine atıyoruz.
-
-
paydaS = veri.Substring(orta + 1, uzunluk – orta – 1);
-
//Aynı "/" karakterinden bir sonkraki karakterden başlayarak son karaktere kadar ki kısmınıda paydaS eşitliyoruz.
-
-
//Ve bulduğumuz değerleri Integer’a çevirip pay ve paydaya atıyoruz.
-
this.pay = System.Convert.ToInt32(payS);
-
this.payda = System.Convert.ToInt32(paydaS);
-
}
-
public void topla(int a, int b)
-
{
-
this.pay = a * this.payda + b * this.pay;
-
this.payda = b * this.payda
-
}
-
-
}
topla() gibi aklımıza gelebilecek bir çok özellikler ekleyebiliriz..
OPERATOR OVERLOADING
Yaptığımız tipi oparatörlerle beraber kullanmak istersek eğer .NET Framework bize sunduğu “operator” on eki ile yapabiliyoruz..
operator overloading fonksiyonlarının bazı önemli nedenlerden dolayı public ve static olmak zorundadır..
Kullanımı çok basittir.
ras r4 = r1 + r2; için
-
public static ras operator + (ras r1, ras r2)
-
{
-
//İşlemler..
-
}
“+” operatörüne oparatör overloading işlemi uyguladığımızda aynı zamanda += oparatörünüde uygulanmış oluyor..
ras r4 = r1 + 5; için
-
public static ras operator + (ras r1, int i)
-
{
-
//İşlemler..
-
}
if(r1 == r2){} için
-
public static bool operator == (ras r1, ras r2)
-
{
-
//İşlemler..
-
}
Örnek olarak ras tipindeki “+” operatörü için şu şekilde kod yazabiliriz.
-
public static ras operator +(ras c1, ras c2)
-
{
-
return new ras(c1.pay * c2.payda + c1.payda * c2.pay, c1.payda * c2.payda);
-
}
sadelestir() Goster() > < == operatörleri gibi birçok özellik ekleyip dahada geliştirilebilir..
Etiketler: C#, constructor overloading, OOP, operator overloading, rasyonel sayılar
“C# ile kullanıcı tanımlı tip geliştirmek ve Operator Overloading” için 1 Yorum
-
online diyor ki:
7 Nisan 2010 11:14neden olmasin:)
