有很多擴展類的方式,如果有類的源代碼,繼承是給對象添加功能的好方法。但如果沒有源代碼,我們可以用擴展方法,它允許改變一個類,但不需要該類的源碼。
擴展方法是靜態(tài)方法,他是類的一部分,但實際上沒有放在類的源代碼中,假如有一個Money類,里面有個Amount屬性,我們想給其增加一個方法,可以如下編寫:
public static class MoneyExtension { public static void AddToAmount( this Money money, decimal amountToAdd) { money.Amount += amountToAdd; } }
其中,第一個參數(shù)是要擴展的類型,放在this關(guān)鍵字之后。在主程序中,AddToAmount看起來像是另一個方法。他沒有顯示第一個參數(shù),也不能對他進行任何處理。要使用新方法,就要進行如下調(diào)用,這與其他方法相同:實例化類名.AddToAmount(10M)。
如果擴展方法與類中的某個方法同名,就永遠不會調(diào)用擴展方法。類中已有的任何實例優(yōu)先。
另外,在一個靜態(tài)方法的第一個參數(shù)前面加this,可以在調(diào)用時直接用 要注意定義的的時候類需要是靜態(tài)的。如:
public static string AddAmazing( this string str) { return str + " !!! " ; }
此時在別處即可調(diào)用
?
在定義方法時,可以更靈活的設置默認值:
private static string MakePath( string fileName = null ) { return String.Format( @" c:\{0}.txt " , fileName ?? " Untitled " ); }
這樣當參數(shù)有值時按定義返回,無參或為空時按默認值返回。
更多文章、技術(shù)交流、商務合作、聯(lián)系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號聯(lián)系: 360901061
您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對您有幫助就好】元
