我對擴展方法如何工作有點困惑。C#擴展方法優先
如果我正確閱讀這個http://msdn.microsoft.com/en-us/library/bb383977.aspx和這If an extension method has the same signature as a method in the sealed class, what is the call precedence?。
然後下面應該寫出「實例」,而是寫入「擴展方法」。
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();
}
}
感謝任何幫助澄清行爲。
你確定用擴展方法編譯的內置方法重寫嗎? – kenny
乍一看或編譯它時,界面沒有Say(),所以你所稱的擴展方法。在接口中使用Save()時,編譯器會抱怨'C:\ projects \ _play \ ExtensionMethods \ Program.cs(2,1):錯誤CS0116:名稱空間不能直接包含成員,如字段或方法' – kenny