W3Cschool
恭喜您成為首批注冊用戶
獲得88經(jīng)驗值獎勵
擴展方法可以用新方法擴展現(xiàn)有類型改變原始類型的定義。
擴展方法是靜態(tài)類的靜態(tài)方法,其中this修飾符應用于第一個參數(shù)。
第一個參數(shù)的類型將是擴展的類型。
例如:
public static class StringExtension {
public static bool IsCapitalized (this string s) {
if (string.IsNullOrEmpty(s))
return false;
return char.IsUpper (s[0]);
}
}
IsCapitalized擴展方法可以被調用,就像它是一個字符串上的實例方法,如下所示:
Console.WriteLine ("Javascript".IsCapitalized());
一個擴展方法調用被轉換回一個普通的靜態(tài)方法調用:
Console.WriteLine (StringExtension.IsCapitalized ("Javascript"));
接口也可以擴展:
public static T First<T> (this IEnumerable<T> sequence){
foreach (T element in sequence)
return element;
throw new InvalidOperationException ("No elements!");
}
...
Console.WriteLine ("Javascript".First()); // J
任何兼容的實例方法優(yōu)先于擴展方法。
在以下示例中,Main的MyMethod方法將始終優(yōu)先 - 即使在使用int類型的參數(shù)x調用時:
class Main {
public void MyMethod (object x) { }
}
static class Extensions {
public static void MyMethod (this Main t, int x) { }
}
在這種情況下調用擴展方法的唯一方法是通過正常的靜態(tài)語法:
Extensions.MyMethod(...)
如果兩個擴展方法具有相同的簽名,則擴展方法必須作為普通靜態(tài)方法調用,以消除調用方法的歧義。
如果一個擴展方法具有更多特定的參數(shù),則更具體的方法優(yōu)先。
以下代碼顯示了如何使用它:
static class StringExtension {
public static bool IsCapitalized (this string s) {...}
}
static class ObjectHelper {
public static bool IsCapitalized (this object s) {...}
}
以下代碼調用StringExtension的IsCapitalized方法:
bool test1 = "Javascript".IsCapitalized();
要調用ObjectHelper的IsCapitalized方法,我們必須明確指定:
bool test2 = (ObjectHelper.IsCapitalized ("Javascript"));
類和結構被認為比接口更具體。
Copyright©2021 w3cschool編程獅|閩ICP備15016281號-3|閩公網(wǎng)安備35020302033924號
違法和不良信息舉報電話:173-0602-2364|舉報郵箱:jubao@eeedong.com
掃描二維碼
下載編程獅App
編程獅公眾號
聯(lián)系方式:
更多建議: