假设我有一个具有以下两个签名的重载扩展方法:
public static void MyExtensionMethod(this Foo foo);
public static void MyExtensionMethod(this Foo foo, Bar bar);
我想将一种方法链接到另一种方法。我可以通过以下两种方式之一执行此操作:
链接技术#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...
}
链接技术 #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...
}
这是我的问题:将重载方法作为扩展方法调用与作为常规方法调用有什么区别吗?如果是这样,有什么区别?一个优于另一个吗?
最佳答案
假设编译器能够解决所有问题,它们应该作为等效的 MSIL 发出。扩展方法只是编译器技巧;它们是现实中的静态方法。
Servy 在他的回答中指出,如果您有同名的实例方法,则可能会遇到问题。 我同意...因此,强烈建议您永远不要将扩展方法命名为与任何实例方法相同。
关于c# - 在这两种链式扩展方法中,是否有理由优先使用其中一种?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9218467/