C# 擴展方法


最近公司需要梳理開發規范,我負責寫 擴展方法 這一部分。

所以特地寫篇博文來准備一下。

 

MSDN:  https://docs.microsoft.com/zh-cn/dotnet/csharp/programming-guide/classes-and-structs/extension-methods

https://www.cnblogs.com/pengze0902/p/6110094.html

https://www.cnblogs.com/Matcha/archive/2016/03/31/5312288.html

 

特別基礎的,怎么實現怎么調用,就不說了,着重看一下有哪些特殊的地方。

 

我對擴展類命名的習慣是類命名為原類名加上 Ex 后綴,Ex 代表的是 Extension 擴展。

 

可以使用擴展方法來擴展類或接口,但不能重寫擴展方法。與接口或類方法具有相同名稱和簽名的擴展方法永遠不會被調用(即擴展方法不會覆蓋類中原有的方法,這也是一個風險)。

編譯時,擴展方法的優先級總是比類型本身中定義的實例方法低。

 

使用場景:

1.一般大家都會寫一個 Util/Common/xxxHelper 之類的的工具類,里面會有 例如 StringHelper、DateTimeHelper 等等,每個Helper里面有多個static的通用方法,然后調用的時候就是StringHelper.GetNotNullStr("aa"); 這樣。還有一種普通的用法就是new 一個對象,通過對象去調用類里面的非static方法。這通常來說意味着一串的代碼,這個時候如果我們適當的使用擴展方法來寫這些方法,調用就會簡短很多,例如 "aa".GetNotNullStr(); 。

2.一般來說我們在開發的過程中,總會需要調用第三方類庫,或是使用一些我們沒有權限修改的類,這時候使用擴展方法就是一個不錯的選擇,但若第三方類庫或原有類添加了同名方法,那么擴展方法就會被覆蓋。

3.可以使用擴展方法來實現 鏈式調用。例如 LINQ。

優點:

1.使代碼變得更加簡潔,調用簡單。

2.不會破壞原有類的封裝性,只有引入了擴展方法命名空間的才可以使用。

缺點:

1.存在被覆蓋的可能。

 

關於擴展方法的一些建議:

1.注意對擴展目標的把控,對 List<T> 所做的擴展 是否可以改為對 IList<T> 或 IEnumerable<T>.

2.注意擴展方法的數量和分類,數量較多時可考慮分類。例如 轉換類型的擴展類,判斷邊界的擴展類。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM