黑马程序员_委托

-------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);};

代码示例:

声明一个委托和一个类

调用方法代码

 

委托中的协变和逆变

协变:协变允许所调用方法的返回类型可以是委托的返回类型的派生类型,当委托方法的返回类型具有的派生类型比委托签名更大时,就成为协变委托方法。因为方法的返回类型比委托签名的返回类型更具体,所以可对其进行隐式转换。

逆变:逆变允许将带有派生参数的方法用作委托,当委托签名具有一个或多个参数,并且这些参数的类型派生自方法参数的类型时,就成为逆变委托方法。因为委托方法签名参数比方法参数更具体,所以可以在传递给处理程序方法时对它们进行隐式转换。

代码示例:

声明委托和需要使用的类

创建人的集合类和学生的集合类

主函数中使用

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值