C#-- 扩展方法
2014-10-22 21:18
88 查看
为什么用扩展方法
如果我们对已有的类(如类库)进行个性化拓展,但是由于源代码未知(类已经封装)或者不可继承(用sealed修饰),我们就得使用扩展方法进行拓展。扩展方法的方式
1. 在已知要扩展的类的源码的情况下: 继承是最好的方法;2. 在不知道要扩展的类的源码的情况下:创建静态类,然后添加方法。
本文采用第二种方法。
假设在前期开发中, 在命名空间 namespace ClassSample中定义了一个类: ClassSample ,该类定义了一个方法Sun(),并且该类已经封装:
namespace ClassSample { public class ClassSample { private int num1; private int num2; private int num3; //求和 public int Sum() { return (num1 + num2 + num3); } } }
现在需要为该类增加一个新的方法: Average()进行求平均值:
现在就需要使用扩展方法:
namespace ClassSample { public static class ClassSampleExt { //求平均值 public static void Average(this ClassSample sample, out double average) { average = Sum() / 3; } } } }
对于该方法,第一个参数是要扩展的类名,放在this关键字之后。告诉编译器,这是类ClassSample的一部分。
调用该方法时,只有实例化ClassSample的一个实例,然后调用:
ClassSample sample = new ClassSample() double average; sample.Average(out average);
注意:
1. 若该类中有同名的方法,该扩展方法不会被执行,原类中方法优先执行。2. 扩展方法必须是在静态类中,扩展的方法也必须是静态的方法。
相关文章推荐
- 两个有用的数组扩展方法
- 不通过SPS对象模型更改文档扩展字段的方法
- 扩展String功能方法
- C#3.0新特性----扩展方法(Extension Methods)初探
- C#3.0 中的扩展方法 (Extension Methods)
- [C#3.0体验]Orcas中内置的LinQ,XLinQ[DLinQ]扩展方法
- php中的function函数参数扩展的方法
- 安装PHP可能遇到的问题“无法载入mysql扩展” 的解决方法
- 在VBA中使用Find方法 (扩展用法)
- Microsoft对异常处理方法的扩展
- 反射时用SetValue方法,报“不能从目标类型扩展到基元类型”
- 关于整合php5,apache2.x,mysql中出现"无法载入 mysql 扩展,请检查 PHP 配置"的解决方法
- 扩展String功能方法
- C# 3.0 新特性:扩展方法初探
- 一个扩展后的Split方法,可根据字符串分隔字符,返回字符数组
- 安装firefox扩展(xpi)文件的简便方法
- C# 3.0语言新特性(语言规范):2 扩展方法
- 一个读取扩展名为xml的资源文件的方法
- 初探C# 3.0 (1) - 隐式类型变量, 扩展方法, Lambda表达式
- C#3.0 中使用扩展方法来扩展接口