委托进阶-python3+opencv3识别图片中的物体并截取的方法

时间:2024-07-30 07:08:56
【文件属性】:

文件名称:委托进阶-python3+opencv3识别图片中的物体并截取的方法

文件大小:10.59MB

文件格式:PDF

更新时间:2024-07-30 07:08:56

.net之美 关键技术解析

3.5 委托进阶 掌握了前面的基础知识以后,从本节开始,将为大家更深入地介绍委托的知识。 3.5.1 为什么委托定义的返回值通常都为void 尽管并非必需,但是大家会发现很多的委托定义返回值都为void,为什么呢?这是因为 委托变量可以供多个订阅者注册,如果定义了返回值,那么多个订阅者的方法都会向发布者 返回数值,结果就是后面一个返回的方法值将前面的返回值覆盖掉了,因此,实际上只能获 得最后一个方法调用的返回值。可以运行下面的代码测试一下。除此以外,由于发布者和订 阅者是松耦合的,发布者根本不关心谁订阅了它的事件、为什么要订阅,更不用说订阅者的 返回值了,所以返回订阅者的方法返回值在大多数情况下根本没有必要。 class Program { static void Main(string[] args) { Publishser pub = new Publishser(); Subscriber1 sub1 = new Subscriber1(); Subscriber2 sub2 = new Subscriber2(); Subscriber3 sub3 = new Subscriber3(); pub.NumberChanged += new GeneralEventHandler(sub1.OnNumberChanged); pub.NumberChanged += new GeneralEventHandler(sub2.OnNumberChanged); pub.NumberChanged += new GeneralEventHandler(sub3.OnNumberChanged); pub.DoSomething(); // 触发事件 } } // 定义委托 public delegate string GeneralEventHandler(); // 定义事件发布者 public class Publishser { public event GeneralEventHandler NumberChanged; // 声明一个事件 public void DoSomething() { if (NumberChanged != null) { // 触发事件 string rtn = NumberChanged(); Console.WriteLine(rtn); // 打印返回的字符串,输出为Subscriber3 } } } // 定义事件订阅者 public class Subscriber1 { public string OnNumberChanged() { return "Subscriber1";


网友评论