Ben temel sınıf A
neden yüklenmiş yöntemleri
public class A
{
public virtual void Method(A parameter)
{
Console.WriteLine(MethodBase.GetCurrentMethod());
}
public virtual void Method(B parameter)
{
Console.WriteLine(MethodBase.GetCurrentMethod());
}
}
inhereted B
public class B : A
{
public virtual void Method(object parameter)
{
Console.WriteLine(MethodBase.GetCurrentMethod());
}
public override void Method(A parameter)
{
Console.WriteLine(MethodBase.GetCurrentMethod());
}
public override void Method(B parameter)
{
Console.WriteLine(MethodBase.GetCurrentMethod());
}
}
uzantısı yöntemi ile statik sınıf S
public static class S
{
public static void Method(this B instance, B parameter)
{
Console.WriteLine(MethodBase.GetCurrentMethod());
}
}
yerleştirme Örnek örneği oluşturmak örnek yöntemi daha düşük önceliğe sahiptüründeve üzerinde Method
çağırmak, biz public override void Method(B parameter)
gerçek sonuç public virtual void Method(object parameter)
olduğunu bekleriz.
var b = new B();
b.Method(new B()); // B.Method (Object parameter) Why???
Neden derleyici daha uygun yöntemi seçmez ??? UPD Ve neden uzantı yöntemi değil?
'B' iç içe değil, devralındı. –
@Henk Holterman – user854301
. Bu, eski kodun eski bir yöntem değil, yeni bir uzantı aramak olduğu eski kodun kırılmasını önlemek içindir. – Ankush