擴充套件方法是c# 3.0中新加入的特性。msdn中對擴充套件方法的定義是:擴充套件方法使您能夠向現有型別「新增」方法,而無需建立新的派生型別、重新 編譯或以其他方式修改原始型別。
擴充套件方法是靜態方法~並且第乙個引數要用this修飾~這個方法將作為第乙個引數也就是帶this引數的類的乙個擴充套件方法~
定義如下
呼叫方法如下,就跟呼叫本身方法一樣
顯示結果如下
下面是對編寫擴充套件方法要注意的幾個原則(當然,仁者見仁、智者見智,這也是一家之言):
擴充套件方法有就近原則,也就是如果在你的程式裡有兩個一模一樣的擴充套件方法,乙個和你的使用類是處於同一命名空間裡,另外乙個處於別的命名空間裡,這個時候會優先使用同一命名空間裡的擴充套件方法,也就是說「血緣關係」越近,越被青睞。
很多人看到擴充套件方法也許眼裡冒出金光,以後在設計的時候不管三七二十一,反正可以擴充套件。還有一些人會對類任意擴充套件,將以前一些作為」helper」的方法統統使用擴充套件方法代替,注意的是擴充套件方法有「汙染性」,所以我覺得在擴充套件的時候還是想想,是不是值得這樣擴充套件。
在擴充套件的時候也不要對比較高層的類進行擴充套件,像我上面對object的擴充套件我覺得就是不可取的,object是所有類的基類,一經擴充套件,所有的類都被「汙染」了。
在.net 2.0/3.0程式中使用擴充套件方法
.net framework 從2.0公升級至3.0/3.5中,增加了不少編譯器級別的語法糖,如var關鍵字、自動屬性、lambda表示式、擴充套件方法等等。
如果使用vs2008發布.net2.0程式時,除了擴充套件方法語法糖不可以直接使用。如果發布帶擴充套件方法的程式則會編譯出錯。究
其原因,是因為編譯器將那些方法(擴充套件方法)帶上extensionattribute屬性, 而extensionattribute這個類卻存在於.net framework 3.5的程
序集中。
使用乙個小技巧即可以使得帶擴充套件方法的程式在.net framework 2.0/3.0時通過編譯:自己定義這個extensionattribute屬性
namespace system.runtime.compilerservices
}這樣, 即使不引用3.5版本的程式集, 也可以享受擴充套件方法帶來的便利!
C 擴充套件方法 學習
c 中可以定義擴充套件方法,還可以為集合做擴充套件方法。示例如下 using system using system.collections.generic using myspace 注意 引入擴充套件方法的空間 namespace con 1 先生。with xugang console.wri...
OKR 方法 學習筆記
最近公司興起了對okr這個詞的討論,並且聽到時總會伴隨提到kpi,提到績效考核。那okr到底是什麼呢?與kpi的區別在 與績效考核有什麼關係?它與我們現在推行的敏捷開發有啥關係呢?因此,就到網上查了些資料,加上個人的一些經驗和理解,盡量用少的篇幅,整理成了這篇文章。一 什麼是okr 我們先來看下什麼...
提公升方法學習筆記
adaboost 用分錯的資料樣本來識別問題,通過調整分錯的資料樣本的權重來改進模型。偏差指的是 值的期望與真實值之間的差距,偏差越大,值越偏離真實資料的標籤。方差描述的是 值的變化範圍,離散程度,也就是離 值期望的距離,方差越大,資料的分布越分散。1.bagging 演算法對資料重取樣,然後在每個...