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)
这是我的问题:调用重载方法作为扩展方法与常规方法之间有什么区别吗?如果是这样,有什么区别?一个比另一个好吗?
假设编译器能够解析所有内容,它们应该作为等效的MSIL发出.扩展方法只是编译器技巧; 它们是现实中的静态方法.
Servy在他的回答中指出,如果你有一个同名的实例方法,你可能会遇到问题.我同意 ......因此,强烈建议您永远不要像任何实例方法那样命名扩展方法.