亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > C# > 正文

C#特性 擴展方法

2020-01-24 02:13:25
字體:
來源:轉載
供稿:網友

作為.net程序員,我們每天都要和BCL(Base Class Linbrary)打交道。無疑,BCL做為一個年輕的框架類庫,她是成功的,但是還有一些時候我們還是得寫一些”Helper”方法來擴展類庫,由于我們不能修改類庫的源代碼,我們只有寫一個個的靜態類。雖然在使用上也算方便,但作為追求完美的程序員來說總有些不雅。


現在我就碰到這樣的事情,前兩天奉命寫一個從XML文件加載Chart圖的設置的方法,從XML加載數據綁定到對象上,這肯定是反射的用武之地了。我經常需要寫一些根據對象屬性名字來判斷這個對象是否有這個屬性或者根據屬性名獲取該屬性的值。還是按照平常一樣,我很快寫了一個PropertyHelper,里面有兩個靜態方法:HasProperty,GetValueByName。


PropertyHelper.HasProperty(point, "X"),如此的調用也還過得去,不過在C# 3.0微軟為我們提供了擴展方法?,F在我們可以直接這樣調用了point.HasProperty(“X”);看看我是如何實現這個擴展方法的?

public static class PropertyExtension{    public static object GetValueByName(this object self, string propertyName)    {      if (self == null)      {        return self ;      }      Type t = self.GetType();      PropertyInfo p = t.GetProperty(propertyName);      return p.GetValue(self, null);    }}

我給object類型添加了一個擴展方法,在.net里所有的類都繼承自object,那所有的類都默認的擁有這個方法了,真方便,呵呵。
注意到和普通的靜態方法有何差別?在這個方法的第一個參數前面多了一個this關鍵字。

擴展方法:

1、方法所在的類必須是靜態的
2、方法也必須是靜態的
3、方法的第一個參數必須是你要擴展的那個類型,比如你要給int擴展一個方法,那么第一個參數就必須是int。
4、在第一個參數前面還需要有一個this關鍵字。

按照上面的步驟寫你就得到了一個“擴展方法”,你可以像調用這個類的原生方法那樣去調用它:

復制代碼 代碼如下:

string str = "abc";
object len = str.GetValueByName("Length");

好像string類型現在有了GetValueByName這個方法一樣,但實際上string并沒有這樣一個方法。那這又是為什么呢?是我們可愛的編譯器在其中做了手腳。為了避開編譯器的干擾,我們來直接欣賞MSIL代碼:

復制代碼 代碼如下:

L_0008: ldstr "Length"
L_000d: call object TestLambda.PropertyExtension::GetValueByName(object, string)

從MSIL中我們可以看出,這段代碼編譯后和調用靜態方法沒有任何的差別(從call指令來看,這是在調用一個靜態方法)。

從這里可以知道擴展方法即可以使用實例調用的方式也可以直接使用靜態類調用的方式:

復制代碼 代碼如下:

str.GetValueByName("Length");
PropertyExtension.GetValueByName(str,"Length");

下面將對擴展方法做一些細節的介紹:
Visual Studio 2008對擴展方法有智能感知的支持,如下圖

在方法的圖標上有一個與其他的都不相同,他的突變下面還帶有一個藍色的向下的箭頭,這就表明這個方法是一個擴展方法。
下面是對編寫擴展方法要注意的幾個原則(當然,仁者見仁、智者見智,這也是一家之言):

擴展方法有就近原則,也就是如果在你的程序里有兩個一模一樣的擴展方法,一個和你的使用類是處于同一命名空間里,另外一個處于別的命名空間里,這個時候會優先使用同一命名空間里的擴展方法,也就是說“血緣關系”越近,越被青睞。


很多人看到擴展方法也許眼里冒出金光,以后在設計的時候不管三七二十一,反正可以擴展。還有一些人會對類任意擴展,將以前一些作為”Helper”的方法統統使用擴展方法代替,注意的是擴展方法有“污染性”,所以我覺得在擴展的時候還是想想,是不是值得這樣擴展。


在擴展的時候也不要對比較高層的類進行擴展,像我上面對object的擴展我覺得就是不可取的,object是所有類的基類,一經擴展,所有的類都被“污染”了。

發表與2008-07-16
于2008-08-06第一次更新

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
欧美激情乱人伦| 久久精品成人欧美大片| 欧美性xxxxx| 日韩激情av在线播放| 国产精品视频精品视频| 91免费看片在线| 日本精品一区二区三区在线| 欧美劲爆第一页| 在线精品91av| 久久久久久久久国产| 亚洲精品av在线| 自拍亚洲一区欧美另类| 午夜精品久久久久久久久久久久久| 国产精品三级久久久久久电影| 国产精品视频久久| 亚洲少妇中文在线| 久久久久99精品久久久久| 97视频免费在线观看| 国产一区深夜福利| 国产欧美日韩中文| 国模视频一区二区三区| 91精品国产乱码久久久久久蜜臀| 午夜免费在线观看精品视频| 精品一区二区三区电影| 国产视频丨精品|在线观看| 色综合91久久精品中文字幕| 成人国产精品色哟哟| 日韩经典一区二区三区| 亚洲国产欧美一区二区三区同亚洲| 麻豆精品精华液| 亚洲激情视频网| 日韩美女免费观看| 久久精品国产综合| 久久综合电影一区| 亚洲人成在线免费观看| 国产精品精品视频一区二区三区| 亚洲毛片一区二区| 91精品久久久久久久久久入口| 亚洲高清免费观看高清完整版| 欧美综合一区第一页| 精品国产乱码久久久久酒店| 久久国产精品久久久久久| 欧美日韩亚洲成人| 成人黄色在线播放| 欧美激情在线视频二区| 欧美性猛交xxxx乱大交| 精品视频久久久久久久| 日韩av电影院| 8050国产精品久久久久久| 国产精品夫妻激情| 久久久久免费精品国产| 日韩中文在线中文网三级| 亚洲r级在线观看| 91在线观看免费| 国产一区二区在线免费视频| 国产一区二区三区三区在线观看| 九色成人免费视频| 国产亚洲一级高清| 亚洲视屏在线播放| 国外成人在线直播| 97视频网站入口| 欧美亚洲激情视频| 自拍视频国产精品| 日韩av影视综合网| 欧美激情网友自拍| 欧美成人免费在线视频| 日韩精品在线视频美女| 成人妇女淫片aaaa视频| 欧美国产精品人人做人人爱| 亚洲a级在线播放观看| 国内精品久久久久久中文字幕| 欧美性极品xxxx娇小| 欧美成人亚洲成人日韩成人| 成人国产亚洲精品a区天堂华泰| 45www国产精品网站| 日韩成人在线观看| 九九久久国产精品| 97精品免费视频| 国产狼人综合免费视频| 在线视频亚洲欧美| 亚洲国产日韩欧美在线图片| 97热精品视频官网| 久久99久久99精品中文字幕| 日韩免费精品视频| 亚洲成年人在线| 在线免费看av不卡| 欧美激情一区二区久久久| 国产mv免费观看入口亚洲| 国产精品极品美女粉嫩高清在线| 国产精品18久久久久久首页狼| 欧美色视频日本版| 精品免费在线观看| 亚洲xxxx妇黄裸体| 国产精品美女久久久久av超清| 亚洲精品久久久久久下一站| 午夜精品福利视频| 91精品国产精品| 亚洲二区中文字幕| 日本免费一区二区三区视频观看| 国产99在线|中文| 久久免费视频这里只有精品| 亚洲精品美女久久| 亚洲最大激情中文字幕| 国产精品高清在线观看| 国产精品免费看久久久香蕉| 亚洲影院色无极综合| 日韩中文字幕视频在线| 97在线精品国自产拍中文| 一区二区亚洲精品国产| 国产精品尤物福利片在线观看| 成人性生交xxxxx网站| 欧美日韩国产中字| 欧美主播福利视频| 91久久精品国产91久久| 久久6精品影院| 欧美精品videos性欧美| 中文字幕国产亚洲| 日韩av电影手机在线观看| 国产精品久久久久久久久久小说| 日本在线精品视频| 欧美精品在线极品| 一区二区欧美亚洲| 国内精品视频久久| 美日韩在线视频| 国产精品香蕉国产| 亚洲欧美国内爽妇网| 欧美日本亚洲视频| 4k岛国日韩精品**专区| 日韩一区二区福利| 亚洲国产成人91精品| 久久精品中文字幕免费mv| 国产成人精品久久| 91超碰caoporn97人人| 成人欧美在线视频| 成人黄色在线观看| 欧美精品亚州精品| 91极品视频在线| 5566成人精品视频免费| 欧美日韩美女在线观看| 日韩精品在线播放| 日韩电视剧在线观看免费网站| 欧美激情一区二区三级高清视频| 国产精品久久在线观看| 国产美女被下药99| 亚洲xxxxx性| 国产精彩精品视频| 日韩三级影视基地| 91久久久亚洲精品| 亚洲一区二区免费在线| 国产欧美日韩免费看aⅴ视频| 国产999精品久久久影片官网| 一本一本久久a久久精品综合小说| 国产成人综合精品在线| 秋霞成人午夜鲁丝一区二区三区| 日韩三级影视基地| 91在线色戒在线| 91精品国产91久久久久久不卡| 国产精品99免视看9| 欧美激情视频一区二区三区不卡| 亚洲人午夜精品免费| 日韩成人中文电影| 日本高清久久天堂| 亚洲精品成人久久| 日韩精品视频免费在线观看|