Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/276.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 静态公共事件_C#_Winforms_Events - Fatal编程技术网

C# 静态公共事件

C# 静态公共事件,c#,winforms,events,C#,Winforms,Events,我有一个公共静态类,它有一些我在整个项目中使用的公共内容。为注销和登录事件添加一个公共静态事件,并将所有相关的类和表单注册到此事件中,以最小化代码,这是否是一个好主意,因为目前我在注销和登录方法中有很多代码,用于在登录或注销时处理表单和不同的类,相反,我只是在login和logout方法中触发事件,并将代码放入为事件注册的每个类的事件处理程序方法中。这是一种好的做法还是不好的做法?这是不好的,因为您的侦听器对象(绑定到那些静态事件的对象)永远不会被垃圾收集,您应该完全避免静态事件。这就是弱事件模

我有一个公共静态类,它有一些我在整个项目中使用的公共内容。为注销和登录事件添加一个公共静态事件,并将所有相关的类和表单注册到此事件中,以最小化代码,这是否是一个好主意,因为目前我在注销和登录方法中有很多代码,用于在登录或注销时处理表单和不同的类,相反,我只是在login和logout方法中触发事件,并将代码放入为事件注册的每个类的事件处理程序方法中。这是一种好的做法还是不好的做法?

这是不好的,因为您的侦听器对象(绑定到那些静态事件的对象)永远不会被垃圾收集,您应该完全避免静态事件。这就是弱事件模式诞生的原因。虽然我并不是说你需要使用这种模式(因为我对你的应用程序的内部结构知之甚少),但阅读这种模式将有助于你更仔细地设计你的应用程序


在这件事上有一个古老而有用的观点。我并不是说你应该使用这种模式;我是说,研究这种模式会告诉您为什么静态事件不是一个好主意。

对于这种类型的场景,您还可以使用设计模式订阅和通知“全局”事件

在实现此设计模式时,可以使用“WeakReference”来避免内存泄漏(引用未被垃圾收集)

例如:

Mediator.Subscribe("Login", callbackForLogin);

Mediator.Notify("Login", parameters);