当前位置: 首页 > 编程语言 > C#

C#中事件只能在内部调用的原因分析分享

时间:2023-04-10 12:13:54 C#

C#学习教程:C#中事件只能在内部调用的原因分析分享但是只能增删delegate方法。例如,在下面的代码中,类Customer中定义了一个委托Order,在Customer内部可以直接调用Order.Invoke()。publicclassCustomer{//定义事件publiceventOrderEventHandlerOrder;公共字符串?姓名;公共浮动?价格;protectedvoidonOrder(OrderEventArgsorderEventArgs){if(Order!=null){Order.Invoke(this,orderEventArgs);}}......而在类外,只添加或删除委托方法,无法调用Order.Invoke(),下面代码中的customer.Order.Invoke()会报错。公共类程序{publicstaticvoidMain(string[]args){varcustomer=newCustomer();customer.name="1";服务员waiter=newWaiter();customer.Order+=waiter.Serve;//customer.Order.Invoke()不能这样编译customer.Think();客户.支付();}}仔细看了刘铁猛老师的《C#入门详解》,才知道这是C#语法糖引起的误解。在定义事件时,下面这行代码是常用的定义方法,是一种简洁的定义方法//事件的简洁定义方法publiceventOrderEventHandlerOrder;而C#中一个事件的完整定义方法如下:privateOrderEventHandlerorderEventHandler;//Delegate,使用private修饰publiceventOrderEventHandlerOrder//Event,增减delegate方法{add{this.orderEventHandler+=value;}移除{this.orderEventHandler-=value;}}使用完整写法定义事件后,在内部调用不能用事件Order调用,而应该使用delegate调用protectedvoidonOrder(OrderEventArgsorderEventArgs){if(this.orderEventHandler!=null){//调用委托this.orderEventHandler.Invoke(this,orderEventArgs);}}可以看到,我们实际调用的delegate是用private修饰的,是private的,所以只能在内部调用,而event(事件)是对privatedelegate进行包装,实现delegate方法的增删改查.刚学C#,不知道清楚了没有。..关于为什么C#中的事件只能在内部调用的文章到此结束。关于C#事件内部调用的更多内容,请搜索往期文章或继续浏览下方相关文章。希望以后大家多多支持!本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处: