非静态私有或受保护事件存在哪些用例?

Ree*_*sey 14 .net c# vb.net

.NET中的受保护或私有(非静态)事件真正起作用的目的是什么?

似乎任何私有或受保护事件都可以通过虚拟方法更轻松地处理.我可以(有点)在静态事件中看到这个需要,但不能用于正常事件.

您之前是否有过一个用例,可以清楚地表明非静态保护或私有事件的需要或优势?

Eri*_*ert 7

这是我实施过的一个有点奇怪但真实世界的场景.您有机器生成的和用户生成的部分类的一半.机器生成的一半包含希望在某些事件发生时通知用户生成的一半的代码.但是,用户生成的一半可能不关心做任何事情,或者它可能会做很多事情.机器生成的一半似乎粗鲁地要求用户生成的一半实现特定方法以便处理他们没有兴趣收听的消息.

为了解决这个问题,机器生成的一半可能会发生私人事件.如果用户生成的一半关心,它可以订阅该事件.如果没有,它可以忽略它.

现在,通过C#3中的部分方法更加优雅地解决了这种情况,但这不是当天的选择.


Tim*_*vis 6

在我看来,私有事件在哪里有用的一个很好的例子是在组件/控件构建中,通常你可能有一个由一个或多个其他组件组成的组件,包含组件可以订阅的私有事件是一个方便的轻松实现观察者模式.

编辑:

让我举个例子...

假设您正在编写一个Grid类型控件,并且在此控件内部,您很可能会有一堆包含的类,这些类是动态创建的Rows,Cols,header等,例如,您想要通知这些包含的类,他们关心的是什么已经发生了,比如Skinning的变化或类似的事情,你不一定希望向网格用户公开事件,这是私人事件很方便的地方,只需要一个或两个处理程序,并在创建每个实例时您的行或col或者附加处理程序的任何内容,否则您只需要编写自己的观察器机制,而不是很难,但为什么当您没有时,您可以只使用多播事件.