Estoy un poco confundido acerca de cómo funcionan los métodos de extensión.C# Método de extensión anterior
Si estoy leyendo esto correctamente http://msdn.microsoft.com/en-us/library/bb383977.aspx y este If an extension method has the same signature as a method in the sealed class, what is the call precedence?.
Luego, lo siguiente debe escribir "Instancia", pero en su lugar escribe "Método de extensión".
interface IFoo
{
}
class Foo : IFoo
{
public void Say()
{
Console.WriteLine("Instance");
}
}
static class FooExts
{
public static void Say(this IFoo foo)
{
Console.WriteLine("Extension method");
}
}
class Program
{
static void Main(string[] args)
{
IFoo foo = new Foo();
foo.Say();
}
}
Apreciamos cualquier ayuda para aclarar el comportamiento.
¿Está seguro de anular un método incorporado con un método de extensión compilado? – kenny
En un segundo vistazo o compilándolo, la interfaz no tiene Say(), entonces lo que tiene llama al método de extensión. Con Save() en la interfaz el compilador se queja con 'C: \ projects \ _play \ ExtensionMethods \ Program.cs (2,1): error CS0116: un espacio de nombre no puede contener directamente miembros como campos o métodos' – kenny