事件是OO等同于GOTO吗?

Pie*_*ten 1 .net c# events goto

在试图找出我们之前的开发人员编写的一些代码时,只是在考虑这个问题.试图找出控制程序是如何发生的,这让我想起了BASIC过去的糟糕时期,那里几乎没有明显的程序执行路径.这更像是滥用事件的症状,还是观察者模式存在结构性问题?

Eri*_*sch 11

与任何技术一样,事件可能被错误地使用和滥用.但是,既然你没有提供任何问题的例子,我们几乎不可能说出你在说什么.

一般来说,没有.事件不是OO的等价物GOTO,也不是典型的问题.我所知道的观察者模式也没有任何结构性问题.但滥用可能发生在任何事情上.

GOTO的原因有很多,但其中一个最大的原因是它是程序流的转移,而不仅仅是子程序的执行.当你使用goto时,程序执行不会返回到你的goto调用完成之后(或者在异步事件的情况下启动之后).程序流程永久地转移到新的执行点.更糟糕的是,它可以将执行转移到任何地方,包括其他控制结构或其他功能.

事件根本没有这些特性,只不过是具有对象感知和发布/订阅功能的函数指针.(好吧,还有更多,但这是他们的基本用法)