Merhaba arkadaşlar, bugün ki yazımda C# Programlama dili üzerinde Method Overloading(Metotların aşırı yüklenmesi) ve Override edilmesi ile ilgili bir şeyler aktarmaya çalışacağım. Öncelikle Method Overloading ile başlayalım. Bir tane Class düşünün içerisinde bir tane method tanımlamışsınız ve bunu kullanıyorsunuz fakat bir tane daha method yazmanız gerekli oldu ve isimlendirme olarak aynı method ismini kullanmanız gerekiyor. İşte burada Method Overloading devreye giriyor aşağıdaki örnek üzerinden ilerleyecek olursak.

 
public class Member {
 
protected User getUserDetail(int id)
{
  return db.where(id);
}
 
protected User getUserDetail(string name)
{
  return db.where(name);
}

Yukarıda görüldüğü gibi Member isimli Class’ımızda iki tane aynı isimden, farklı tipte parametreler alan methodumuz oldu.

Burada dikkat etmemiz gereken ana hususlar.

  • Metotların dönüş tipleri aynı olmalıdır.
  • Metotlar farklı tipte parametreler almalıdır.

Genel olarak Method Overloading‘i bu şekilde tanımlayabiliriz.

Şimdi Method Override anlatımına geçelim. Yine bir tane Class’ımız olsun ve bu Class’a base(temel) bir Class inherit edelim yani temel işlemleri yapmak için tasarladığımız bir tane alt Class olsun ve bu Class içerisinde getDetail isimli bir tane methodumuz olsun. Ama bu base Class’ı base olarak aldığımız Class’ta da getDetail() isimli bir method’da tanımlamamız gerektiğini varsayalım. Kod olarak yazarsam daha açıklayıcı olacaktır. Çünkü bu anlatımlar ve kullanımlar genelde çok soyut kalıyor örneklendirmekte kolay olmuyor, belki kod üzerinden devam edersem daha açıklayıcı olabilirim.

 
public  class BaseMethods
    {
        public void getDetail()
        {
 
    }
   }

Yukarıda göreceğiniz üzere bir tane Class tanımım ve içerisinde de bir adet getDetail isimli void dönüş tipli metodum var. Bu Class’ı başka bir class’a inherit edelim.

 
public class Users : BaseMethods
{
 
}

Göreceğiniz üzere Users isimli sınıfımıza BaseMethods sınıfımızı inherit ettik. Şu anda ana problemimize dönecek olursak iki sınıf içerisinde de getDetail isimli method tanımlaması yapmamız gerekmektedir.Bunu yapmak için bize gerekli olan virtual anahtarıdır. virtual anahlarını atadığımız metot sanal olur ve aynı isimde farklı bir metot tarafından override edilebilir.

 
public class Users : BaseMethods
{
    public override void  getDetail()
    {
        
    }
     
}
 
public class BaseMethods
{
    public virtual void getDetail()
    {
 
    }
}

Yukarıda ki örnekte gördüğünüz üzere BaseMethods sınıfını miras alan Users sınıfı BaseMethods sınıfındaki getDetail isimli metodu kendi metoduna atadığı override anahtarı ile ezmektedir. Yani kendi içerisinde tanımladığı getDetail artık geçerli bir method olmuş BaseMethods’daki getDetail metodu bu sınıfta ezilmiştir. Bu konu biraz soyut olabilir ve belki benim örneğim kafa karıştırabilir bunun için daha farklı kaynaklara bakmanızda fayda da var. Ben genel olarak açıklamaya çalıştım, umarım kafanızda bir şeyler oluşturabilmişimdir. Eğer gördüğünüz hatalı yerler veya sorularınız var ise her zaman yorumlarınızı bekliyorum.

Son olarak bir resimde eklemek istedim.

enter image description here

Bu yazıya veda ederken sizlere Badfinger’dan bir parça armağan ediyorum.