C#是否可以将弱事件模式与静态类一起使用?

C#是否可以将弱事件模式与静态类一起使用?,c#,weak-events,weakeventmanager,C#,Weak Events,Weakeventmanager,我使用了一个静态类,因为我不喜欢传递一个巨大的设置文件,但是我希望能够让实例订阅静态类上的静态事件 我正在研究使用PropertyChangedEventManager的AddListener方法,但它需要添加一个实例 这可能吗?我使用的是.net 4.0,以防万一。您可以拥有一个静态事件,并让多个实例订阅它。您只需记住,所有连接的实例都会收到事件通知,并调用它们的实现。这在内存管理方面也会有问题,在实例从事件中解救出来之前,它们不会超出范围并获得GC 下面是要显示的示例脚本: delegate

我使用了一个静态类,因为我不喜欢传递一个巨大的设置文件,但是我希望能够让实例订阅静态类上的静态事件

我正在研究使用PropertyChangedEventManager的AddListener方法,但它需要添加一个实例


这可能吗?我使用的是.net 4.0,以防万一。

您可以拥有一个静态事件,并让多个实例订阅它。您只需记住,所有连接的实例都会收到事件通知,并调用它们的实现。这在内存管理方面也会有问题,在实例从事件中解救出来之前,它们不会超出范围并获得GC

下面是要显示的示例脚本:

delegate void Pop();
static event Pop PopEvent;

void Main()
{
    var t1= new Thing("firstone");
    var t2= new Thing("secondOne");

    //fire event
    PopEvent();
}

public class Thing
{
    public Thing(string name)
    {
        this.name = name;
        PopEvent += this.popHandler;
    }

    private string name="";

    public void popHandler()
    {
        Console.WriteLine("Event handled in {0}",this.name);
    }

}
输出:

在firstone中处理的事件

在secondOne中处理的事件

尝试一下,看看会发生什么。如果它不起作用,请让我们明确知道它不起作用的原因,与您正在使用的代码一起。您是否查阅了
MSDN文档
WeakReference的简单列表,其中T是一个委托?问题是具体询问如何使用一个事件模式,该模式专门使用弱引用,以便在剩余的时间内不会使被引用对象保持活动状态应用程序生命周期。这根本不能解决这个问题。是的,这似乎是我正在尝试的,因为我无法让弱事件模式工作。但是,当我注册到一个静态事件并使用静态类订阅它时,VisualStudio似乎没有意识到该事件已被使用,这产生了一个恼人的警告。我可以禁用它,尽管我想,尽管我觉得它根本不应该警告我。为什么它不能识别静态事件的使用?@JamesJoshuaStreet警告是因为没有使用支持字段。你应该在某个地方提起这个事件,然后警告就会消失。不要忽略警告。因为event
PopEvent
和method
Main
必须驻留在类(或结构)中,我想我们上面看到的所有内容都包含在“外部”类中?委托类型
Pop
和类
Thing
可以嵌套在“外部”类中,也可以是非嵌套的(声明为
命名空间的直接成员)。它们可以是非嵌套的。这只是LinqPad的复制/粘贴。唯一可以触发事件的对象必须与声明事件的对象在同一个类中。