删除具有已连接事件的类的本地实例

时间:2017-01-10 12:13:51

标签: c# garbage-collection

假设我有一个包含事件的类:

    class MyClass 
    {
        public delegate void MyDelegate();
        public event MyDelegate MyEvent;
        public MyClass()
        {
            Console.WriteLine("MyClass created");
        }
        ~MyClass()
        {
            Console.WriteLine("MyClass removed");
        }
        public void MyFunction()
        {
            Console.WriteLine("MyClass.MyFunction()");
            if (MyEvent != null)
                MyEvent();
        }
    }

假设MyFunction是一些异步操作,所以我需要一个事件才能知道它已经完成。有时候我需要类的功能,所以我创建了类的实例,运行它并获得结果。之后,我希望实例将被销毁。

现在我实例化这个类并将其事件连接到匿名函数。为了测试功能,我创建了一个功能:

    public static void Test()
    {
        MyClass test = new MyClass();
        test.MyEvent += delegate() { Console.WriteLine("MyEvent fired"); };
        test.MyFunction();
    }

然后运行它:

    static void Main(string[] args)
    {
        Console.WriteLine("test 1");
        Test();
        Console.WriteLine("----------------\ntest 2");
        Test();
    }

输出结果为:

test 1
MyClass created
MyClass.MyFunction()
MyEvent fired
----------------
test 2
MyClass created
MyClass.MyFunction()
MyEvent fired
MyClass removed
MyClass removed

不幸的是,只有在应用程序完成后才会删除MyClass实例。使用后如何删除类(或通知GC删除)?

0 个答案:

没有答案