文章详情

  • 游戏榜单
  • 软件榜单
关闭导航
热搜榜
热门下载
热门标签
php爱好者> php文档>C#扩展方法详解

C#扩展方法详解

时间:2011-04-12  来源:南韩之家

在C# 3.0微软为我们提供了C#扩展方法:

 

    C#语言有很多值得学习的地方,这里我们主要介绍C#扩展方法,包括介绍好像string类型现在有了GetValueByName这个方法一样,但实际上string并没有这样一个方法等方面。

 

    在我们的编程生涯中我们要使用很多很多类库,这些类库有的是我们自己开发的,我们有她的代码,有的是第三方发布的,我们不仅没有他们的代码,连看的机会都没有。

 

    作为.net程序员,我们每天都要和BCL(Base Class Linbrary)打交道。无疑,BCL做为一个年轻的框架类库,她是成功的,但是还有一些时候我们还是得写一些”Helper”方法来扩展类库,由于我 们不能修改类库的源代码,我们只有写一个个的静态类。虽然在使用上也算方便,但作为追求完美的程序员来说总有些不雅。现在我就碰到这样的事情,前两天写一 个从XML文件加载Chart图的设置的方法,从XML加载数据绑定到对象上,这肯定是反射的用武之地了。我经常需要写一些根据对象属性名字来判断这个对 象是否有这个属性或者根据属性名获取该属性的值。还是按照平常一样,我很快写了一个 PropertyHelper,里面有两个静态方法:HasProperty,GetValueByName。

 

    PropertyHelper.HasProperty(point, "X"),如此的调用也还过得去,不过在C# 3.0微软为我们提供了C#扩展方法。现在我们可以直接这样调用了point.HasProperty(“X”);看看我是如何实现这个C#扩展方法的?

  1. public static class PropertyExtension  
  2. {  
  3. public static object GetValueByName(this object self, string propertyName)  
  4. {  
  5. if (self == null)  
  6. {  
  7. return self ;  
  8. }  
  9. Type t = self.GetType();  
  10. PropertyInfo p = t.GetProperty(propertyName);  
  11. return p.GetValue(self, null);  
  12. }  

    我给object类型添加了一个C#扩展方法,在.net里所有的类都继承自object,那所有的类都默认的拥有这个方法了,真方便,呵呵。

 

    注意到和普通的静态方法有何差别?在这个方法的第一个参数前面多了一个this关键字。

    C#扩展方法:

    1 方法所在的类必须是静态的

    2 方法也必须是静态的

    3 方法的第一个参数必须是你要扩展的那个类型,比如你要给int扩展一个方法,那么第一个参数就必须是int。

    4 在第一个参数前面还需要有一个this关键字。

    按照上面的步骤写你就得到了一个“C#扩展方法”,你可以像调用这个类的原生方法那样去调用它:

  1. string str = "abc";  
  2. object len = str.GetValueByName("Length");
排行榜 更多 +
找茬脑洞的世界安卓版

找茬脑洞的世界安卓版

休闲益智 下载
滑板英雄跑酷2手游

滑板英雄跑酷2手游

休闲益智 下载
披萨对对看下载

披萨对对看下载

休闲益智 下载