3 Mart 2014 Pazartesi

Overloading

Giriş
Method overloading C++, Java, C# gibi ana dillerin hepsinde var. Kurallar birbirlerine benziyor. Aşağıda konu hakkında aldığım notlar var.

Compile Time (Static) Polymorphism
Polymorphism iki çeşit olabilir. Dynamic ve Static. Static polymorphism derleme zamanında overload edilen metodlar ile gerçekleştirilir.

Overloading ve Hiding Arasındaki Fark
Overloading aynı isimli ve aynı return type'a sahip metodların farklı parametreler almasıdır. Eğer return type değişirse bir metod diğerini saklar.  C# örneğinde hiding gösteriliyor.

public class S
{
public S()
{
}

public int myFunc(int a, int b)
{
return a + b;
}
}

public class M:S
{
public M()
{
}

public string myFunc(int a, int b)
{
return (a + b).ToString();
}
}

public class Test
{
public static void Main(string[] args)
{
M mm
= new M();
mm
.myFunc(1,2); // Why I am not able to access S class myFunc
}
}

Overloading
Overloading kullanırken dikkat edilmesi gereken kural, derleyici her zaman "most specific argument" kuralını uygular. Bu kural Java ve C# için de geçerlidir.

Buradaki C# örneğinde null verilen parametre object yerine double [] alan metodun çağırılmasına sebep oluyor. Açıklaması ise yukarıdaki ile aynı. Hiyerarşide "most specific argument" ı bulmak için T1  yani double [] ile object arasında dönüşüm olmalı ancak object 'ten double [] 'ye dönüşüm olmamalı.


Overloading ve Kalıtım
Kalıtım ve overloading bence yanyana gelmemesi gereken iki şey. Mümkünse kullanmamak en iyisi. Kalıtan sınıfın herhangi bir metodu çağrılabilecek durumda ise, yukarıda "most specific argument" kuralı gerçersiz olabiliyor, ve ilk bulunan metod çağrılabiliyor. Örnek:


Hiç yorum yok:

Yorum Gönder