Her metodun kendine özgü bir imzası bulunmaktadır. İmza;
- Metot Adı
- Parametre Sayısı
- Parametrelerin Tipi
bilgilerini içermektedir. Aynı imzaya sahip birden fazla metot tanımlanamaz. Üç bilgiden en az birinin farklı olması şartıyla metot tanımlanabilir.
Bu bilgilerden yola çıkarak parametre sayısı ve parametrelerin tipinden en az birisinin farklı olması şartıyla aynı ada sahip metotlar tanımlayabileceğimiz sonucunu çıkarabiliriz. Aynı isme sahip farklı metotların tanımlanmasına Metotların Aşırı Yüklenmesi denir.
İmza; metodun geri dönüş değeriyle alakalı bilgi içermez. Sadece ve sadece yukarıdaki 3 bilgiyi içermektedir.
private static int metot(int a,int b) { } private static int metot(string a,string b) { } private static int metot(int a,string b) { }
Metot adı ve parametre sayısı aynı olmasına rağmen parametre tipleri farklıdır. Farklı imzalara sahip olacaklarından yukarıdaki gibi bir tanımlama yapılabilir.
private static int metot(int a) { } private static int metot(int a,int b) { } private static int metot(int a,int b,int c) { }
Metot adı ve parametrelerin tipi aynı olmasına rağmen parametre sayıları farklıdır. Farklı imzalara sahip olacaklarından yukarıdaki gibi bir tanımlama yapılabilir.
private static int metot(int a,int b) { } private static void metot(int a, int b) { }
İmza; metodun geri dönüş değeriyle alakalı bilgi içermez. Yukarıdaki metotlar aynı imzaya sahip olduklarından (Metot adı, parametre sayısı ve türü aynı) böyle bir tanımlama yapılamaz.
Hangi Metodun Çağrılacağına Nasıl Karar Verilir ?
Derleyici aynı isme sahip metotlardan hangisini çağıracağına karar vermek için metot bildirimi ile metot çağrımı arasındaki uyuma bakar. Metot çağrımı ile aynı parametre sayısına ve türüne sahip bir metot bildirimi varsa ilgili metot direk çağrılacaktır. Parametre sayısı aynı olmasına rağmen parametre türleri farklıysa veri kaybı olmayacak şekilde uygun bir metot çağrılır. Örneğin double tipinde parametre alan bir metoda int tipinde parametre gönderilebilir.
private static void metot(double a,double b) { Console.WriteLine("metot(double a,double b) çağrıldı."); } private static void metot(double a, int b) { Console.WriteLine("metot(double a, int b) çağrıldı."); } private static void metot(string a, string b) { Console.WriteLine("metot(string a, string b) çağrıldı."); } static void Main(string[] args) { // metot(double a,double b) çağrıldı. metot(15.8, 4.58); // metot(double a, int b) çağrıldı. metot(15, 4); // metot(string a, string b) çağrıldı. metot("Serdar", "Yılmaz"); }
Uygulama
private static int EnBuyuk(int sayi1, int sayi2) { if (sayi1 > sayi2) return sayi1; else return sayi2; } private static int EnBuyuk(int sayi1, int sayi2, int sayi3) { int buyuk = EnBuyuk(sayi1, sayi2); return EnBuyuk(buyuk, sayi3); } private static int EnBuyuk(int sayi1, int sayi2, int sayi3, int sayi4) { int buyuk = EnBuyuk(sayi1, sayi2, sayi3); return EnBuyuk(buyuk, sayi4); } static void Main(string[] args) { Console.WriteLine(EnBuyuk(15, 26)); // Çıktı: 26 Console.WriteLine(EnBuyuk(53, 62, 7)); // Çıktı: 62 Console.WriteLine(EnBuyuk(45, 11, 120,114)); // Çıktı: 120 }
Serdar YILMAZ