Sono un po 'confuso su come funzionano i metodi di estensione.C# Precedenza metodo estensione
Se sto leggendo correttamente questo http://msdn.microsoft.com/en-us/library/bb383977.aspx e questo If an extension method has the same signature as a method in the sealed class, what is the call precedence?.
Quindi quanto segue dovrebbe scrivere "Istanza", ma invece scrive "Metodo di estensione".
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();
}
}
Apprezzare qualsiasi aiuto nel chiarire il comportamento.
Sei sicuro di sovrascrivere un metodo integrato con un metodo di estensione compilato? – kenny
A prima vista o compilandolo, l'interfaccia non ha Say(), quindi quello che hai chiamato il metodo di estensione. Con Save() nell'interfaccia il compilatore si lamenta con 'C: \ projects \ _play \ ExtensionMethods \ Program.cs (2,1): errore CS0116: Uno spazio dei nomi non può contenere direttamente membri come campi o metodi' – kenny