根據微軟的說法,「擴展方法是一種特殊的靜態方法,但它們被稱爲好像它們是擴展類型上的實例方法」。你可以添加你稱之爲靜態方法的擴展方法嗎?
有沒有辦法添加它調用的擴展方法,就好像它是靜態方法?或者做一些有相同效果的東西?
編輯: 我的意思是「調用,就好像它是一個擴展類的靜態方法」。 對不起,不明確。
根據微軟的說法,「擴展方法是一種特殊的靜態方法,但它們被稱爲好像它們是擴展類型上的實例方法」。你可以添加你稱之爲靜態方法的擴展方法嗎?
有沒有辦法添加它調用的擴展方法,就好像它是靜態方法?或者做一些有相同效果的東西?
編輯: 我的意思是「調用,就好像它是一個擴展類的靜態方法」。 對不起,不明確。
根據微軟的說法,「擴展方法是一種特殊的靜態方法,但它們被稱爲是擴展類型上的實例方法」。
是的,擴展方法是靜態方法。它們都可以以常規方式作爲靜態方法調用,作爲擴展實例方法在它們「擴展」的類型上調用,甚至可以在空引用上作爲擴展方法調用它們。
例如:
public static class Extensions {
public static bool IsNullOrEmpty(this string theString) {
return string.IsNullOrEmpty(theString);
}
}
// Code elsewhere.
string test = null;
Console.WriteLine(test.IsNullOrEmpty()); // Valid code.
Console.WriteLine(Extensions.IsNullOrEmpty(test)); // Valid code.
編輯:
有沒有辦法添加一個擴展方法,它叫,就好像它是一個靜態方法?
你的意思是你想調用,例如,string.MyExtensionMethod()?在這種情況下,不,沒有辦法做到這一點。
是的,我的意思是。我拿着「用C#編寫的客戶端代碼,調用擴展方法和實際定義在類型中的方法之間沒有明顯區別」,並且沒有想到我可以在空引用上調用它們。 – Spike 2010-10-07 02:58:11
擴展方法是靜態方法。你不需要做任何事情。
將擴展方法與任何其他靜態方法區分開來的唯一方法是,它可以被調用,就好像它是一個實例方法,另外被正常調用爲靜態方法。
不,並有一些討論在http://stackoverflow.com/questions/638850 – 2010-10-07 01:03:00
@Joe:「不」,是什麼?請參閱下面的答案。 – 2010-10-07 01:04:34
@Michael:我的意思不是,C#不支持可以在目標類上調用靜態方法的擴展方法。該鏈接討論了爲什麼不支持。你可以在擴展類上靜態調用擴展方法,但我認爲他是在問前者。 – 2010-10-07 01:08:31