|
系列文章導航:
不能不說的C#特性-迭代器(下),yield以及流的延遲計算
走進Linq-Linq to SQL How do I(1)
走進Linq-Linq to SQL How do I(2)
走進Linq-Linq to SQL How do I(3)
走進Linq-Linq to SQL源代碼賞析 Table
走進Linq-Linq to SQL源代碼賞析之Provider的初始化
走進Linq-Linq to SQL源代碼賞析,通過Linq to SQL看Linq
在我們的編程生涯中我們要使用很多很多類庫,這些類庫有的是我們自己開發的,我們有她的代碼,有的是第三方發布的,我們不僅沒有他們的代碼,連看的機會都沒有。
作為.NET程序員,我們每天都要和BCL(Base Class Linbrary)打交道。無疑,BCL做為一個年輕的框架類庫,她是成功的,但是還有一些時候我們還是得寫一些”Helper”方法來擴展類庫,由于我們不能修改類庫的源代碼,我們只有寫一個個的靜態類。雖然在使用上也算方便,但作為追求完美的程序員來說總有些不雅。現在我就碰到這樣的事情,前兩天奉命寫一個從XML文件加載Chart圖的設置的方法,從XML加載數據綁定到對象上,這肯定是反射的用武之地了。我經常需要寫一些根據對象屬性名字來判斷這個對象是否有這個屬性或者根據屬性名獲取該屬性的值。還是按照平常一樣,我很快寫了一個PropertyHelper,里面有兩個靜態方法:HASProperty,GetValueByName。
PropertyHelper.HASProperty(point, "X"),如此的調用也還過得去,不過在C# 3.0微軟為我們提供了擴展方法。現在我們可以直接這樣調用了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);
}
}
it知識庫:不能不說的C#特性-擴展方法,轉載需保留來源!
鄭重聲明:本文版權歸原作者所有,轉載文章僅為傳播更多信息之目的,如作者信息標記有誤,請第一時間聯系我們修改或刪除,多謝。