我有一个公共静态类,它包含我在我的通知项目中使用的一些公共内容。为Logout和Login事件添加公共静态事件并将所有相关的类和表单注册到此事件以最小化代码是一个好主意,因为目前我在注销和登录方法中有很多代码来处理表单和不同登录或退出时的类,我只是在登录时触发事件并注销方法,并将代码放入事件处理程序方法中,为每个为该事件注册的类。这是好事还是坏事?
答案 0 :(得分:1)
它很糟糕,因为你的侦听器对象(那些绑定到那些静态事件)永远不会被垃圾收集,你应该完全避免静态事件。这就是弱事件模式诞生的原因。虽然我并不是说您需要使用该模式(因为我对您的应用程序内部结构并不了解),但阅读此模式可以帮助您更仔细地设计应用程序。
关于此事,有一个(旧的但有用的)article。我不是说你应该使用这种模式;我说学习这种模式会告诉你为什么静态事件不是一个好主意。
答案 1 :(得分:0)
对于这种类型的场景,您还可以使用Mediator设计模式订阅并通知" global"事件
Mediator.Subscribe("Login", callbackForLogin);
Mediator.Notify("Login", parameters);
您可以使用" WeakReference"实现此设计模式以避免内存泄漏(引用不是垃圾收集)。
例如: http://zamjad.wordpress.com/2012/03/05/using-mediator-to-communicate-between-user-controls-part-7/