扩展方法,首先是一种方法,它可以用来扩展已定义类型中的方法成员。比如,一个Canvas类,你想给它添加一个画鸭子的方法,
DrawDuck(),怎么办?那你只有自己定义一个CustomCanvas类,继承Canvas,在CustomCanvas类中定义这个画鸭子的方法。
现在你有了扩展方法,就不用了这么麻烦了。定义一个在扩展方法
public static class CanvasExtern
{
public static void DrawDuck(this Canvas source)
{
if (source == null)
{
throw new ArgumentException("错误");
}
new Pen(Brushes.Red, 2);
......// 画鸭子
}
}
使用的时候 直接 Canvas myCanvas = new Canvas();
myCanvas.DrawDuck();//即可画出鸭子
注意:
(1)扩展方法必须在一个非嵌套、非泛型的静态类中定义;
(2)它至少要有一个参数;
(3)第一个参数必须加上this关键字作为前缀(第一个参数类型也称为扩展类型,即指方法对这个类型进行扩展);
(4)第一个参数不能使用任何其他的修饰符(如不能使用ref、out等修饰符);
(5)第一个参数的类型不能是指针类型。
这些规则都是硬性规定,无论方法违反了哪一条,编译器都可能会报错,或认为它不是一个扩展方法。