tengo clase base A
métodos ¿Por qué sobrecargados tienen menor prioridad que método de instancia
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());
}
}
clase estática S
con método de extensión
public static class S
{
public static void Method(this B instance, B parameter)
{
Console.WriteLine(MethodBase.GetCurrentMethod());
}
}
Ejemplo que crear instancia del tipo B
e invocar Method
en él, esperamos que sea public override void Method(B parameter)
el resultado real es public virtual void Method(object parameter)
.
var b = new B();
b.Method(new B()); // B.Method (Object parameter) Why???
¿Por qué el compilador no selecciona el método más adecuado ??? UPD ¿Y por qué no es el método de extensión?
'B' no está anidado pero se hereda. –
@Henk Holterman gracias – user854301
método de extensión no se llama si el objeto tiene un método con el mismo nombre. esto es para evitar romper el código antiguo donde la expectativa es llamar al método anterior y no a la extensión nueva. – Ankush