以前总听说扩展方法扩展方法,只是听说是C#3.0后出来的新玩意,也仅仅是知道Linq中用到好多的扩展方法,但是他究竟是个什么东东,怎么用它,用它的好处是什么,总是模模糊糊,那么我们今天就尝试揭开它神秘的面纱。

  我们现在看到每个方法都和声明它的类关联,但是C#3.0的扩展方法的特性扩展了这个边界,允许编写和声明它的类之外的类关联的方法。想要知道如何利用这个特征,我们先看一个例子:

class MyData
{
double D1,D2,D3;
public MyData(double d1,double d2,double d3)
{
D1=d1;D2=d2;D3=d3;
}
public double Sum()
{
return D1+D2+D3;
}
}

   这是一个非常简单而且功能有限,但假设它含有另外一个方法会更有用,该方法返回三个数据的平均值.那么我们有几种方法可以实现这个增加的功能.

  • 如果我们有源代码,那么我们可以直接修改这个类,将方法直接添加进去.
  • 然而,如果我们不能修改这个类,例如,如果这个类在一个第三方的类库中,那么只要它不是密封的,那么我们可以把它当作基类并在派生类中实现这个新增的方法.

  如果我们不能访问代码,或该类是密封的,或有其它设计原因使这些方法不能工作,那么我们不得不在另外一个类中使用该类的公有可用成员编写一个方法.

例如,我们可以编写一个下面代码中这样的类:

最新文章

  1. 纯练手设置ip地址脚本
  2. nfs客户端报错解决Stale file handle
  3. Hirbernate第三次试题分析
  4. dump redo日志文件的信息
  5. CCF 201612-2 火车购票 (暴力)
  6. Custom Sort Order
  7. 关于arraylist.remove的一些小问题。
  8. 对有状态bean和无状态bean的理解(转)
  9. deepin添加新的打开方式软件
  10. Scala的类中定义内部类实战
  11. R语言学习——矩阵
  12. 洛谷 P3376 【【模板】网络最大流】
  13. loadrunner 脚本优化-事务时间简介
  14. Expected value at 1:0 异常解决方法
  15. Python关于类的实操
  16. [CSL 的魔法][求排序最少交换次数]
  17. 安装包安装npm
  18. 超详细从零记录Hadoop2.7.3完全分布式集群部署过程
  19. 大坑啊oracle的隐式转换
  20. oracle 定义临时变量,并使用分支判断

热门文章

  1. 窗口与导航-----Selenium快速入门(十三)
  2. php不用递归完成无限分类,从表设计入手完整演示过程
  3. iOS - 安全
  4. $_SERVER[]数组解析
  5. String 在内存中如何存储的
  6. 关于MySQL连接抛出Authentication Failed错误分析
  7. C# 后缀名
  8. c++之sleep函数
  9. js之作用域
  10. C++命名空间、函数重载、缺省参数、内联函数、引用