c# - 在这两种链式扩展方法中,是否有理由优先使用其中一种?

标签 c# extension-methods method-chaining

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

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/

相关文章:

c# - "An unsecured or incorrectly secured fault was received from the other party"

c# - LINQ:检查字段 (db) 是否包含 ILIST 中的项目?

c# - 扩展方法调用在 MVC 中不起作用

postgresql - PL/pgSQL 可以从一个函数返回一个函数吗?甚至一组功能?

java - 在 Java 中链接方法调用时遇到问题

c# - 未将对象引用设置为对象的实例 asp.net、c#

c# - 在 Monotouch 中下载多个文件的推荐模式(异步/多线程)

c# - AWS - Amazon Polly 文本转语音

c# - 如何比较可空类型?

Golang 接口(interface)方法链接