委托的编译代码-python3+opencv3识别图片中的物体并截取的方法

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

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

文件大小:10.59MB

文件格式:PDF

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

.net之美 关键技术解析

3.3 委托的编译代码 再次回到3.2.1节的代码,注释掉编译错误的行,然后重新进行编译,再借助Reflactor 来对event的声明语句进行探究,看看为什么会发生这样的错误: public event GreetingDelegate MakeGreet; 可以看到,尽管在GreetingManager中将MakeGreet声明为public,但是,实际上 MakeGreet会被编译成私有字段,难怪会发生上面的编译错误,因为它根本就不允许在 GreetingManager类的外面以赋值的方式访问,从而验证了前面小节的结论。 图3-1 MakeGreet编译后的结果 再进一步看下MakeGreet所产生的代码: private GreetingDelegate MakeGreet; //对事件的声明,实际是声明一个私有的委托变量 [MethodImpl(MethodImplOptions.Synchronized)] public void add_MakeGreet(GreetingDelegate value){ this.MakeGreet = (GreetingDelegate) Delegate.Combine(this.MakeGreet, value); } [MethodImpl(MethodImplOptions.Synchronized)] public void remove_MakeGreet(GreetingDelegate value){ this.MakeGreet = (GreetingDelegate) Delegate.Remove(this.MakeGreet, value); } 现在已经很明确了:MakeGreet事件确实是一个GreetingDelegate类型的委托,只不过 不管是不是声明为public,它总是被声明为private。另外,它还有两个方法,分别是 add_MakeGreet和remove_MakeGreet,这两个方法分别用于注册委托类型的方法和取消注 册。实际上也就是:“+=”对应add_MakeGreet,“-=”对应remove_MakeGreet。而这两个方 法的访问限制取决于声明事件时的访问限制符。


网友评论