Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/306.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 扩展方法取代了C中的标准方法#_C#_Static_Extension Methods - Fatal编程技术网

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

C# 扩展方法取代了C中的标准方法#,c#,static,extension-methods,C#,Static,Extension Methods,有几种方法可以使用带有标准方法签名的扩展方法作为扩展(而不显式地调用静态类)?例如: public class Foo { public override string ToString() { return "Own"; } } public static class ExtensionsMethods { public static string ToString(this Foo foo) { return "Ext

有几种方法可以使用带有标准方法签名的扩展方法作为扩展(而不显式地调用静态类)?例如:

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
version而不显式地调用class
ExtensionsMethods
不,您不能这样做。如果具有相同签名的方法可用,则不使用扩展方法:

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

有关详细信息,请参阅


您可能会选择继承或a作为替代解决方案。

无意冒犯,但您可以不问而回答此问题。查看扩展方法msdn文档。如果存在具有相同签名的另一个方法,则无论发生什么情况,都不会调用它,直到可以调用现有方法为止。扩展方法在被调用时获得的优先级最低。