明確使用擴充套件方法
擴充套件方法也可以像普通的靜態類方法一樣使用。這種呼叫擴充套件方法的方式更加冗長,但在某些情況下是必要的。
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
修飾符,則最後一行將編譯。