2010-10-07 80 views
4

根據微軟的說法,「擴展方法是一種特殊的靜態方法,但它們被稱爲好像它們是擴展類型上的實例方法」。你可以添加你稱之爲靜態方法的擴展方法嗎?

有沒有辦法添加它調用的擴展方法,就好像它是靜態方法?或者做一些有相同效果的東西?

編輯: 我的意思是「調用,就好像它是一個擴展類的靜態方法」。 對不起,不明確。

+1

不,並有一些討論在http://stackoverflow.com/questions/638850 – 2010-10-07 01:03:00

+0

@Joe:「不」,是什麼?請參閱下面的答案。 – 2010-10-07 01:04:34

+1

@Michael:我的意思不是,C#不支持可以在目標類上調用靜態方法的擴展方法。該鏈接討論了爲什麼不支持。你可以在擴展類上靜態調用擴展方法,但我認爲他是在問前者。 – 2010-10-07 01:08:31

回答

13

根據微軟的說法,「擴展方法是一種特殊的靜態方法,但它們被稱爲是擴展類型上的實例方法」。

是的,擴展方法是靜態方法。它們都可以以常規方式作爲靜態方法調用,作爲擴展實例方法在它們「擴展」的類型上調用,甚至可以在空引用上作爲擴展方法調用它們。

例如:

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()?在這種情況下,不,沒有辦法做到這一點。

+0

是的,我的意思是。我拿着「用C#編寫的客戶端代碼,調用擴展方法和實際定義在類型中的方法之間沒有明顯區別」,並且沒有想到我可以在空引用上調用它們。 – Spike 2010-10-07 02:58:11

4

擴展方法靜態方法。你不需要做任何事情。

將擴展方法與任何其他靜態方法區分開來的唯一方法是,它可以被調用,就好像它是一個實例方法,另外被正常調用爲靜態方法。

相關問題