c# - C# : why does this work? 中的扩展方法

标签 c# static extension-methods this legacy-code

我有点困惑为什么这不会出错。我在一些过时的遗留软件的深处发现了这段代码,并惊讶地发现它能正常工作。

public static string CleanFileName(this string fileName)
{
  return CleanFileName(fileName, 64);
}

public static string CleanFileName(this string fileName, int maxLength)
{
  //some logic
}

我对扩展方法的经验是这样调用它:

fileName.CleanFileName(64);

这是否仅因为它也是一个静态方法才有效?这是常见的做法,只是我还没有见过的东西,还是我应该用火杀死的一段过时的遗留代码?

最佳答案

扩展方法总是可以选择性地被调用,就好像“this”修饰符甚至不存在一样(又名作为一个普通的静态方法)。这样做的可读性较差,但在语法上是有效的。

另一个答案具有误导性,因为“它起作用是因为方法调用是从与其重载相同的类型中进行的。”暗示了一些关于扩展方法的事情。无论您碰巧在哪个类中,您都可以像普通静态方法一样调用扩展方法。但是通过下面的评论,听起来好像混淆的是该类是否需要限定。在这方面,Nathan 是正确的,类名可以省略的原因是因为调用发生在与重载相同的类中。

关于c# - C# : why does this work? 中的扩展方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3535258/

相关文章:

c# - 如何更改方法签名/属性以匹配给定的执行示例?

c# - WPF DataGrid - 新条目的行不可见

c# - 减少 C# 或 VB.NET 枚举中的值

c++ - static 对 const 局部变量有影响吗?

java - 如何使用静态方法设计类

asp.net-mvc-3 - View 模型无法识别扩展方法?

c# - 动态添加和删除 UserControl

c# - Int32.CompareTo(int x) 性能

c - 闪烁问题但不想使用 CLIPCHILDREN 风格

c# - 了解扩展 ElementAt(index)