Anders Hejlsberg ve ekibi tarafından 2000 yılında geliştirilmeye başlanan C# programlama dili, 2002 yılında “C# 1.0” sürümü ile kullanıcılarla buluştu. O günden günümüze kadar Microsoft tarafından geliştirilmeye devam eden bu programlama dili kullanıcıları tarafından çok sevildi. Kullanım kolaylığı, her alana hitap etmesi ve modern yazım teknikleri sayesinde daha da popüler hale gelen C# programlama dilinde aşırı yükleme(overloading) nedir ve nasıl kullanılmalı gelin biraz yakından bakalım.
Metotlarda Aşırı Yükleme
Bir metodu bir diğer metottan ayıran 3 temel özellik bulunur. Bunlar;
- Metot Adı
- Parametre Sayısı
- Parametrelerin Tipi
Normalde bu üç özelliğinde aynı olduğu birden fazla metot tanımlanamaz. Fakat bazı durumlarda metot adını aynı yapıp parametrelerin sayısını veya tipini değiştirerek birden fazla tanımlamaya ihtiyaç duyarız. İşte metotların bu şekilde kullanılmasına aşırı yükleme denir. Bu durum sayesinde kullanım kolaylaşır ve birden fazla görev tek bir metot adı ile çözülmüş olur.
public static int OrnekMetot (int a,int b) { }
public static int OrnekMetot (string a,string b) { }
Örneğin bu tanımlamaya bakacak olursak, aynı isimde ve parametre sayısında oluşturulmuş iki metot, verilen parametrelerin tipinin farklı olmasından dolayı sorunsuz şekilde çalışacaktır.
public static int OrnekMetot (int a,int b) { }
public static int OrnekMetot (int a,int b,int c) { }
Bu tanımlamada ise aynı isim ve aynı tipte parametre kullanılmış. Fakat kullanılan parametrelerin sayısının farklılığı nedeniyle sorunsuz çalışacaktır.
public static int OrnekMetot (int a,int b) { }
public static void OrnekMetot (int a,int b) { }
Burada ise dikkat edilmesi gereken nokta metotların dönüş tipinin farklı olması. Bu birçok kişiyi yanıltsa da bu özelliğin farklı olması metotlar için bir şey ifade etmez. Buna dayanarak bu tanımlamalarda hem metot adı hem de kullanılan parametrelerin sayısı ve tipinin aynı olması nedeniyle çalışmayacaktır.
Örnek bir uygulamaya bakacak olursak,
using System;
namespace MetotAsiriYüklemeOrnegi {
class Program {
void yazdir(int a) {
Console.WriteLine("Girilen sayı: " + a);
}
void yazdir(int a, int b) {
Console.WriteLine("Girilen sayılar: " + a + " ve " + b);
}
static void Main(string[] args) {
Program p1 = new Program();
p1.yazdir(50);
p1.yazdir(100, 200);
Console.ReadLine();
}
}
}
Girilen sayı: 50
Girilen sayılar: 100 ve 200
Yapıcı Metotların Aşırı Yüklenmesi
Yapıcı metotlarda tıpkı normal metotlar gibi aşırı yüklenebilir. Bunun için parametre sayısının veya tipinin farklı olması şartı aranır. Bir örnek verecek olursak,
using System;
namespace YapiciBlokAsiriYukleme {
class Araba {
Araba(string marka) {
Console.WriteLine("Marka: " + marka);
}
Araba(int km) {
Console.WriteLine("Kilometre: " + km);
}
static void Main(string[] args) {
Araba araba1 = new Araba("Ferrari");
Araba araba2 = new Araba(15);
Console.ReadLine();
}
}
}
Marka: Ferrari
Kilometre: 15
Operatörlerin Aşırı Yüklenmesi
Temel veri tipleri üzerinde işlem yapılmasını sağlayan operatörler maalesef bir sınıftan oluşturulan nesneler üzerinde kullanılamaz. Örneğin;
OrnekNesne nesne1 = new OrnekNesne();
OrnekNesne nesne2 = new OrnekNesne();
OrnekNesne nesne3 = nesne1 + nesne2;
Fakat operatörleri aşırı yükleyerek bu durumundan kurtulabiliriz. Aşırı yükleme yapabilmek için şöyle bir söz dizimi kullanmalıyız;
public static <dönüş-değeri> operator <operatör-işareti>(<parametre>) {}
Şimdi bu duruma bir örnek verecek olursak eğer;
using System;
namespace OperatorAsiriYukleme{
class Operator {
private int kullaniciSayi;
public Operator (int kullaniciSayi) {
this.kullaniciSayi = kullaniciSayi;
}
public void Yazdir() {
Console.WriteLine(this.kullaniciSayi);
}
public static Operator operator + (Operator birinciSayi, Operator ikinciSayi) {
return new Operator(birinciSayi.kullaniciSayi + ikinciSayi.kullaniciSayi);
}
static void Main(string[] args) {
Operator op1 = new Operator(250);
Operator op2 = new Operator(250);
Operator op3 = op1 + op2;
op3.Yazdir();
}
}
}
500
Göründüğü gibi örnek programımız sorunsuz çalıştı.
İlk sürümünden bu yana popülerleşen, geçtiğimiz her gün kendini daha da geliştiren C#, yazılımcılara sağladığı bunun gibi pratik çözümlerle daha da popüler hâle geleceğe benziyor. Birçok kişinin hayatını kurtaran bu yöntemden siz de faydalanıyor musunuz?