Serdar YILMAZ / Software Developer
Bizimkisi Bir “Bug” Hikayesi...
Akbank Bankacılık Merkezi
Serdar Yılmaz C# – Metotların Aşırı Yüklenmesi

C# – Metotların Aşırı Yüklenmesi

dotnetHer metodun kendine özgü bir imzası bulunmaktadır. İmza;

  1. Metot Adı
  2. Parametre Sayısı
  3. 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


Bu İçeriği Arkadaşlarınızla Paylaşmak İster misiniz?

3 Yorum

  1. Yazılım
    18 Temmuz 2019 de 08:42 · Cevapla

    Mükemmel anlatım, iyi ki sizin gibi bilgilerini paylaşan insanlar var hocam

  2. emre
    9 Ocak 2018 de 10:59 · Cevapla

    teşekkürler güzel anlatım

Bir Yorum Yapın