当前位置: 首页 > 文章教程  > 计算机与互联网 > 网络编程

4.11委托

8/31/2020 9:56:04 PM 人评论

4.11委托

图片 1 知识点讲解:光盘:视频\PPT讲解(知识点)\第4章\委托.mp4

当C#中使用委托后,能够处理其他编程语言需要的函数指针来处理的问题。确实委托和函数比较类似,但是它是匿名的。委托和函数相比,主要有如下两点区别。

  • 委托是面向对象和类型安全的,而函数的指针是不安全的类型。
  • 委托同时封装了对象实例和方法,而函数指针仅指向函数成员。

委托不会关心它所封装的方法或所属的类,它只负责实现这些方法和委托的类型相兼容。

在C#中,声明委托使用delegate关键字来实现,语法格式如下:

修饰符 delegate 返回类型 委托名(形参);

其中,委托的修饰符包括访问修饰符和new,不能在同一个委托内多次使用同一个修饰符。修饰符new用于隐藏从基类继承而来的同名委托。public、protected、internal和private用于控制委托类型的可访问性,但是根据具体的需要可能不允许使用某修饰符。

C#的委托名是一种标识符,所以应该遵循标识符的命名规则,即最好能体现出委托的含义和用途。另外,形参是可选的,用来指定委托的参数。返回类型用于设置委托的返回类型。

如果一个方法和某委托相兼容,则这个方法必须具备如下2个条件。

  • 两者具有相同的签名,即具有相同的参数数量,并且类型相同、顺序相同和参数修饰符也相同。
  • 两者返回类型相同。

例如下面的一段代码。

delegat Int weituo(Object mm,Int i);

在上述代码中,声明了一个Int类型的委托weituo,并且包含了Object类型的参数mm以及Int类型的参数i。上述委托可以和下面代码中的方法chuli相兼容:

Int chuli(Object mm,int i);

C#委托是多路广播的,所以可以将多个委托实例组合在一起,这就构成了委托链。这样委托链中所有的委托调用列表被连接在一起,组成了一个新的调用列表,这个新列表包含2个或更多个方法。在C#中,使用二元“+”和“+=”运算符来组合委托事例,使用一元“−”和“−=”运算符来删除委托实例。

当使用委托组合处理和删除处理后,会生成一个新的委托。该委托有其独立的调用列表,被组合处理和删除处理后的原调用列表保持不变。

如果在一个委托实例的调用列表内包含多个方法,那么当调用此类委托实例时将会顺序执行调用列表中的各个方法。以上述方式调用的每个方法都使用相同的参数集。

如果在参数集内包含引用或输出参数,则各个方法的调用都将使用对同一变量的引用。所以说,如果调用列表内的某个方法对该变量进行了更改,那么调用列表中排在该方法以后的所有方法所使用的参数都将随之改变。

当委托调用包含引用参数、输出参数或返回一个返回值,那么委托调用的最后引用、输出参数的值或返回值,就是调用列表中最后一个方法所产生的引用、输出参数的值或返回值。

上一篇:4.10接口

下一篇:4.12事件

相关教程

共有条评论 网友评论

验证码: 看不清楚?