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