c# 初学者关于事件和委托的问题提问

    private static Action<bool> _l1PowerOn;
    public static event Action<bool> L1PowerOn
    {
        add => _l1PowerOn += value;
        remove => _l1PowerOn -= value;
    }


private void L1PowerOnAction(bool powerOn)
    {     
            _l1PowerOn?.Invoke(powerOn);          
    }

这几行代码是什么意思?初学者请教,请大家讲的细一点

这只是语法,你理解含义就好。

假设你有个一键往所有招聘网站投递简历的要求,那么我把你这个代码换成这个要求的中文代码,你在看能理解不

private static Action<bool> _投递简历;
    public static event Action<bool> 投递简历
    {
        add => _投递简历 += value;   
        remove => _投递简历 -= value;      //这里是多播委托,这样写只是语法糖,语法而已。你只需要知道意思就行
    }
private void  请帮我投递简历(bool powerOn)
    {     
            _投递简历?.Invoke(powerOn);        //如果 我们事先定义了,就自动多播调用传递给每个具体的投递简历的实现
    }

所以,如果我们事先什么都没定义,这个就是null,所以他用了?
如果我们事先写了
投递简历+=前程无忧
投递简历+=Boss直聘
投递简历+=拉勾
他就不是null了,你执行这个动作,他就分别给上面3个网站投递简历

【以下回答由 GPT 生成】

这段代码涉及到C#中的事件和委托。让我逐步解释每一部分的含义和作用。

首先,这里定义了一个静态字段 _l1PowerOn,它的类型是 Action<bool>,表示一个接受一个 bool 类型参数并且没有返回值的方法。这个字段是私有的,也就是只能在当前类内部访问。

接着,通过使用 event 关键字定义了一个事件 L1PowerOn,它也是一个 Action<bool> 类型的事件。事件是一种特殊的多播委托,可以用于实现发布-订阅模式,让其他代码可以订阅并接收到事件的通知。

在事件的定义中,使用了 C# 6 引入的一种简化语法。addremove 分别是事件的订阅和取消订阅操作。使用这种语法,可以自动为事件添加和移除委托的实例。

具体来说,当有代码使用 += 运算符订阅 L1PowerOn 事件时,编译器会自动调用 add 方法将委托添加到 _l1PowerOn 字段中的委托链中。同样地,使用 -= 运算符取消订阅时,编译器会自动调用 remove 方法将该委托从委托链中移除。

接下来是 L1PowerOnAction 方法,它是一个私有的实例方法。它接受一个 bool 类型参数 powerOn,并在方法体中调用 _l1PowerOn 委托的 Invoke 方法,将 powerOn 参数传递给委托。

使用 ?. 运算符是一种简化的调用委托或方法的方式。它的作用是在调用委托或方法之前进行空引用检查,如果委托或方法不为空,才会执行调用操作。这样可以避免在委托为空时引发空引用异常。

总结一下,这段代码定义了一个事件 L1PowerOn,其他代码可以订阅这个事件并接收到通知。当调用 L1PowerOnAction 方法时,会调用订阅了 L1PowerOn 事件的代码,并将传递过来的参数传递给这些代码。

希望这样的解释对你有所帮助。如果有任何疑问,请随时提问。



【相关推荐】



如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^