扩展方法取代了C#中的标准方法

And*_*hin 2 c# extension-methods static

有一些方法可以使用扩展方法和标准方法的签名作为扩展(没有明确的静态类的吸引力)?例如:

public class Foo
{
    public override string ToString()
    {
        return "Own";
    }
}

public static class ExtensionsMethods
{
    public static string ToString(this Foo foo)
    {
        return "Extensions";
    }
}

class Program
{
    static void Main()
    {
        var foo = new Foo();            
        Console.WriteLine(foo.ToString()); // "Own" will be printed
    }
}
Run Code Online (Sandbox Code Playgroud)

我是否可以使用Extensions- ToString版本而无需对课程有明确的吸引力ExtensionsMethods

Mat*_*eid 17

不,你不能这样做.如果具有相同签名的方法可用,则不使用扩展方法:

您可以使用扩展方法来扩展类或接口,但不能覆盖它们.永远不会调用与接口或类方法具有相同名称和签名的扩展方法.

有关详细信息,请参阅编译时带有绑定扩展方法的扩展方法(C#编程指南).

可能有继承或装饰器作为替代解决方案.