C# Metotları Aşırı Yüklemek

C# Metotlar konusunda şimdiye kadar yaptığımız uygulamalarda metotlarda eksik veya fazla parametre ile çağrıldığında hata meydana gelir Örnek…:

using System; 
class Metotlar { 
static int Topla (int a,int b) 
{ return a+b; } 
static void Main() 
{ 
int a=Topla(2,5,7); 
Console.Write(a); 
} 
} 

Yukarıdaki örnekte Topla metoduna Topla(2,5,7) sayıları gönderilmektedir, ancak static int Topla (int a,int b) tanımlama bloğunda Topla metodunun iki değer alacağı belirtilmiştir, bu yüzden program çalışmayacak ve hata verecektir.

c-overloaded-1
Bazı Durumlarda metotlara gönderilecek olan parametre sayısı değişken olabilir, bu gibi durumlarda aynı metodun 2. veya 3. kopyası hazırlanır. Her kopyanın parametreleri farklı olur. Aynı ada sahip birden fazla metot hazırlamaya metodun aşırı yüklenmesi(overload) denilmektedir.

static int Topla (int a,int b) 
{ return a+b; } 
static int Topla (int a,int b,int c) 
{ return a+b+c; } 

Programcı int tipinde 2 sayıyı toplamak istiyorsa metodu 2 parametre ile çağırır. Bu durumda bu metodun 2 parametreli kopyası devreye girer. Metot 3 parametre ile çağrıldığında ise 3 parametreye sahip 2. kopyası işlev görür. Metodun çağrıldığı satırda kullanılan parametre yapısına bakılarak metodun hangi kopyasının kullanacağına karar verilir. Aşağıda verilen uygulama derlenip işletildiğinde metodun 3. parametreye sahip versiyonu işletilir.

Yukarıda hazırladığımız metodun her 2 kopyası da int tipinde bilgiler alıyordu. Ancak bazen hazırladığınız metot ile değişik tipteki bilgileri toplamak isteyebilirsiniz. Nasıl ki aynı metodun değişik sayıda parametreye sahip versiyonlarını hazırlamak mümkün oluyorsa, değişik tipte bilgiler üzerinde işlem yapan kopyalarını hazırlayabilirsiniz. Aşağıda verilen metot hem float hem de int bilgileri toplayabilir.

static int Procedure1(int X, int Y) 
{ 
return (X + Y); 
}	
static float Procedure1(float X, float Y) 
{ 
return (X + Y); 
}	

Bu metoda parametre olarak 2 float sayıyı gönderirseniz metodun 2. kopyası işletilir. Yukarıda verilen uygulamanın Main() metodu aşağıdaki gibi düzenlediğinde bu metodun float bilgiler üzerinde işlem yapan kopyası işletilir.

public static void Main() 
{ 
object Toplam = Procedure1(100.25f, 200.75f); 
Console.WriteLine(Toplam); 
} 

Aynı örnekten yola devam edecek olursak: Bazen toplanacak sayıların kaç adet olduğu programın yazımı sırasında belli değildir. Bu durumda her ihtimal için metodun ayrı bir kopyasını hazırlamak gerekir ki bu pratik değildir. Bu gibi durumlarda parametreler dinamik bir diziye yerleştirilir. Çalışma anında dinamik dizinin içeriğine bağlı olarak metot işlev görür. Bu işlemin nasıl yapıldığını anlatmak için yukarıda verdiğimiz konsol uygulamasını aşağıdaki gibi düzenledik. Aşağıda verilen kodu dikkatlice incelerseniz params anahtar kelimesinden yararlandığımı fark edersiniz.

class sinif_1 
{ 
public static void Main() 
{ 
int Toplam = Procedure1(100, 200); 
Console.WriteLine(Toplam); 
} 
static int Procedure1(params int[] X) 
{ 
int T = 0; 
foreach(int i in X) 
T = T + i; 
return T; 
} 
} 

Bu şekilde düzenlenen metot istenilen sayıda parametre ile çağrılıp işletilebilir. Bu metot ile float tipindeki sayısal bilgileri de toplayabilmek istiyorsanız bu metodun aşağıdaki gibi 2. bir kopyasını hazırlamanız gerekir.

static int Procedure1(params int[] X) 
{ 
int T = 0;  
foreach( int i in X) 
T = T + i;  
return T; 
}	
static float Procedure1(params float[] X) 
{ 
float T = 0;  
foreach( float i in X) 
T = T + i;  
return T; 
}	

Pin It on Pinterest