明确使用扩展方法
扩展方法也可以像普通的静态类方法一样使用。这种调用扩展方法的方式更加冗长,但在某些情况下是必要的。
static class StringExtensions
{
public static string Shorten(this string text, int length)
{
return text.Substring(0, length);
}
}
用法:
var newString = StringExtensions.Shorten("Hello World", 5);
何时将扩展方法作为静态方法调用
在某些情况下,你仍需要使用扩展方法作为静态方法:
- 解决与成员方法的冲突。如果新版本的库引入具有相同签名的新成员方法,则会发生这种情况。在这种情况下,编译器将首选成员方法。
- 使用相同签名解决与另一种扩展方法的冲突。如果两个库包含类似的扩展方法,并且在同一文件中使用具有扩展方法的两个类的名称空间,则会发生这种情况。
- 将扩展方法作为方法组传递给委托参数。
- 通过
Reflection
做自己的绑定。 - 在 Visual Studio 的立即窗口中使用扩展方法。
使用静态
如果使用 using static
指令将静态类的静态成员引入全局范围,则会跳过扩展方法。例:
using static OurNamespace.StringExtensions; // refers to class in previous example
// OK: extension method syntax still works.
"Hello World".Shorten(5);
// OK: static method syntax still works.
OurNamespace.StringExtensions.Shorten("Hello World", 5);
// Compile time error: extension methods can't be called as static without specifying class.
Shorten("Hello World", 5);
如果从 Shorten
方法的第一个参数中删除 this
修饰符,则最后一行将编译。