关于C# Event 在内存占用方面的解释

// Define a delegate type.
public delegate void SimpleDelegate();

public class Publisher
{
    // Define an event of type SimpleDelegate.
    public event SimpleDelegate MyEvent;

    // A method that invokes the event.
    public void RaiseEvent()
    {
        MyEvent?.Invoke();
    }
}

public class Subscriber
{
    // A method to be called when the event is invoked.
    public void EventHandler()
    {
        Console.WriteLine("Event Handler Called");
    }
}

public class Program
{
    public static void Main()
    {
        Publisher publisher = new Publisher();
        Subscriber subscriber = new Subscriber();

        // Add the subscriber's event handler to the event's invocation list.
        publisher.MyEvent += subscriber.EventHandler;

        // Invoke the event. This will call all methods in its invocation list.
        publisher.RaiseEvent();  // Outputs: "Event Handler Called"
    }
}

以上为一个Event注册的代码,当Program的实例没有被销毁时,从其他任何地方Raise都可以,因为Event 是一个方法指针,Invoke相当于引用。

注意当实例注册事件,并在一段时间销毁时,又没有注销事件,我们依然可以Invoke它,因为一旦我们注册了它,C#就会分配一片空间给它,并且除非我们主动注销,它将永远存在,这会造成一些内存上的问题。

所以一定要主动注销。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值