在链接扩展方法的这两种方法中,有没有理由使用其中一种方法?

Fis*_*rdo 1 c# extension-methods method-chaining

假设我有一个带有以下两个签名的重载扩展方法:

public static void MyExtensionMethod(this Foo foo);
public static void MyExtensionMethod(this Foo foo, Bar bar);
Run Code Online (Sandbox Code Playgroud)

我想将一种方法链接到另一种方法.我可以通过以下两种方式之一来做到这一点:

链接技术#1

public static void MyExtensionMethod(this Foo foo)
{
    // Call overload using extension method syntax.
    foo.MyExtensionMethod(new Bar());
}

public static void MyExtensionMethod(this Foo foo, Bar bar)
{
    // Do stuff...
}
Run Code Online (Sandbox Code Playgroud)

链接技术#2

public static void MyExtensionMethod(this Foo foo)
{
    // Call overload as a regular method.
    MyExtensionMethod(foo, new Bar());
}

public static void MyExtensionMethod(this Foo foo, Bar bar)
{
    // Do stuff...
}
Run Code Online (Sandbox Code Playgroud)

这是我的问题:调用重载方法作为扩展方法与常规方法之间有什么区别吗?如果是这样,有什么区别?一个比另一个好吗?

And*_*ber 6

假设编译器能够解析所有内容,它们应该作为等效的MSIL发出.扩展方法只是编译器技巧; 它们现实中的静态方法.

Servy在他的回答中指出,如果你有一个同名的实例方法,你可能会遇到问题.我同意 ......因此,强烈建议您永远不要像任何实例方法那样命名扩展方法.