2

有没有办法使用带有标准方法签名的扩展方法作为扩展(没有明确诉诸静态类)?例如:

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
    }
}

我可以ToString在没有明确诉诸课堂的情况下使用 Extensions- 版本吗ExtensionsMethods

4

1 回答 1

17

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

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

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

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

于 2013-05-21T12:40:28.523 回答