【问题标题】:Can you add extension methods that you call like static methods? [duplicate]你能像静态方法一样添加你调用的扩展方法吗? [复制]
【发布时间】:2011-04-22 03:16:22
【问题描述】:

根据微软的说法,“扩展方法是一种特殊的静态方法,但它们被称为扩展类型的实例方法”。

有没有办法像静态方法一样添加它调用的扩展方法?或者做其他具有相同效果的事情?

编辑: 我的意思是“就好像它是扩展类上的静态方法一样调用”。 很抱歉有歧义。

【问题讨论】:

  • 没有,stackoverflow.com/questions/638850有一些讨论
  • @Joe:对什么说“不”?请参阅下面的答案。
  • @Michael:我的意思是不,C# 不支持可以在目标类上作为静态方法调用的扩展方法。该链接讨论了为什么不支持。你可以在扩展类上静态调用扩展方法,但我以为他问的是前者。
  • @Joe:明白了。是的,它可以被解释为任何一种方式,但我认为就海报的实际问题而言,你是对的。

标签: c# extension-methods


【解决方案1】:

根据微软的说法,“扩展方法是一种特殊的静态方法,但它们被称为扩展类型的实例方法”。

是的,扩展方法是静态方法。它们都可以作为静态方法以常规方式调用,作为它们“扩展”的类型的扩展实例方法,甚至可以作为空引用的扩展方法调用。

例如:

public static class Extensions {
    public static bool IsNullOrEmpty(this string theString) {
        return string.IsNullOrEmpty(theString);
    }
}

// Code elsewhere.
string test = null;
Console.WriteLine(test.IsNullOrEmpty()); // Valid code.
Console.WriteLine(Extensions.IsNullOrEmpty(test)); // Valid code.

编辑:

有没有办法像静态方法一样添加它调用的扩展方法?

您的意思是要调用例如 string.MyExtensionMethod() 吗?在这种情况下,不,没有办法做到这一点。

【讨论】:

  • 是的,我确实是这个意思。我认为,“对于用 C# 编写的客户端代码,调用扩展方法和在类型中实际定义的方法之间没有明显区别”,从表面上看,我认为我不能在空引用上调用它们。跨度>
【解决方案2】:

扩展方法静态方法。你不需要做任何事情。

扩展方法与任何其他静态方法的唯一区别在于它可以像实例方法一样被调用除了可以作为静态方法正常调用。

【讨论】:

    猜你喜欢
    • 2013-01-08
    • 2019-12-26
    • 1970-01-01
    • 2011-01-01
    • 2010-09-19
    • 1970-01-01
    • 2011-11-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多