|
系列文章導(dǎo)航:
不能不說(shuō)的C#特性-匿名方法和Lambda表達(dá)式
不能不說(shuō)的C#特性-迭代器(上)及一些研究過(guò)程中的副產(chǎn)品
不能不說(shuō)的C#特性-迭代器(下),yield以及流的延遲計(jì)算
走進(jìn)Linq-Linq to Objects(上)基礎(chǔ)篇
走進(jìn)Linq-Linq to Objects(下)實(shí)例篇
走進(jìn)Linq-Linq to SQL感性認(rèn)識(shí)篇
走進(jìn)Linq-Linq to SQL How do I(1)
走進(jìn)Linq-Linq to SQL How do I(2)
走進(jìn)Linq-Linq to SQL How do I(3)
走進(jìn)Linq-How do I(4)拾遺補(bǔ)零篇第一節(jié)
走進(jìn)Linq-Linq to SQL源代碼賞析 Table
走進(jìn)Linq-Linq to SQL源代碼賞析之Provider的初始化
走進(jìn)Linq-Linq to SQL源代碼賞析,通過(guò)Linq to SQL看Linq
在我們的編程生涯中我們要使用很多很多類庫(kù),這些類庫(kù)有的是我們自己開(kāi)發(fā)的,我們有她的代碼,有的是第三方發(fā)布的,我們不僅沒(méi)有他們的代碼,連看的機(jī)會(huì)都沒(méi)有。
作為.NET程序員,我們每天都要和BCL(Base Class Linbrary)打交道。無(wú)疑,BCL做為一個(gè)年輕的框架類庫(kù),她是成功的,但是還有一些時(shí)候我們還是得寫一些”Helper”方法來(lái)擴(kuò)展類庫(kù),由于我們不能修改類庫(kù)的源代碼,我們只有寫一個(gè)個(gè)的靜態(tài)類。雖然在使用上也算方便,但作為追求完美的程序員來(lái)說(shuō)總有些不雅。現(xiàn)在我就碰到這樣的事情,前兩天奉命寫一個(gè)從XML文件加載Chart圖的設(shè)置的方法,從XML加載數(shù)據(jù)綁定到對(duì)象上,這肯定是反射的用武之地了。我經(jīng)常需要寫一些根據(jù)對(duì)象屬性名字來(lái)判斷這個(gè)對(duì)象是否有這個(gè)屬性或者根據(jù)屬性名獲取該屬性的值。還是按照平常一樣,我很快寫了一個(gè)PropertyHelper,里面有兩個(gè)靜態(tài)方法:HASProperty,GetValueByName。
PropertyHelper.HASProperty(point, "X"),如此的調(diào)用也還過(guò)得去,不過(guò)在C# 3.0微軟為我們提供了擴(kuò)展方法。現(xiàn)在我們可以直接這樣調(diào)用了point.HASProperty(“X”);看看我是如何實(shí)現(xiàn)這個(gè)擴(kuò)展方法的?
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);
}
}
it知識(shí)庫(kù):不能不說(shuō)的C#特性-擴(kuò)展方法,轉(zhuǎn)載需保留來(lái)源!
鄭重聲明:本文版權(quán)歸原作者所有,轉(zhuǎn)載文章僅為傳播更多信息之目的,如作者信息標(biāo)記有誤,請(qǐng)第一時(shí)間聯(lián)系我們修改或刪除,多謝。