-------Windows Phone 7手机开发、.Net培训、期待与您交流! -------
| 委托是一种引用方法的类型,它与类、接口和数组相同,属于引用型。
| C#允许把任何具有相同签名(相同的返回值类型和参数)的方法分配给委托变量,所以可通过编程的方式来更改方法调用,这是为现有类动态的指定新代码的最佳方法,也是C#实现事件驱动的编程模型的主要途径。
| 委托的实质是代表方法的引用,它具有以下特点:
(1) 委托类似于C++函数指针,是完全面向对象的,是安全的数据类型。
(2) 委托允许将方法作为参数进行传递。
(3) 委托可用于定义回调方法。
(4) 委托可以链接在一起。
(5) 委托签名不需要与方法精确匹配。
委托的声明
[访问修饰符] delegate 返回值类型委托名([参数列表])
例如:public delegate int Caculate(int x,int y);
委托的实例化
委托类型委托变量名 =new 委托型构造函数(委托要引用的方法名)
注意:由于实例化委托实际上是创建了一个对象,所以可以用来参与赋值运算,甚至作为方法参数进行传递。例如委托对象a和b,可以通过a=b来将b所引用的方法赋值给a。
匿名方法
它允许将代码块作为参数传递,以代替单独定义的方法(比如该方法只使用一次,则没有单独创建的必要)
委托类型委托变量名=delegate([参数列表]){代码块};
例如:Caculate cal = delegate(int x,int y){return (int)Math.pow(x,y);};
代码示例:
声明一个委托和一个类
调用方法代码
委托中的协变和逆变
协变:协变允许所调用方法的返回类型可以是委托的返回类型的派生类型,当委托方法的返回类型具有的派生类型比委托签名更大时,就成为协变委托方法。因为方法的返回类型比委托签名的返回类型更具体,所以可对其进行隐式转换。
逆变:逆变允许将带有派生参数的方法用作委托,当委托签名具有一个或多个参数,并且这些参数的类型派生自方法参数的类型时,就成为逆变委托方法。因为委托方法签名参数比方法参数更具体,所以可以在传递给处理程序方法时对它们进行隐式转换。
代码示例:
声明委托和需要使用的类
创建人的集合类和学生的集合类
主函数中使用