gpt4 book ai didi

c# - 为什么不能直接在外部调用公共(public)事件?

转载 作者:太空狗 更新时间:2023-10-29 18:22:16 26 4
gpt4 key购买 nike

假设我们有一个声明了事件的类:

public class FooBar
{
public event EventHandler FooBarEvent;
}

尽管事件“公开”,我们不能从外部调用 FooBarEvent.Invoke

这可以通过使用以下方法修改类来克服:

public class FooBar
{
public event EventHandler FooBarEvent;

public void RaiseFooBarEvent(object sender, EventArgs eventArguments)
{
FooBarEvent.Invoke(sender, eventArguments);
}
}

为什么只能通过添加和删除监听器来限制访问外部公共(public)事件?

最佳答案

定义一个public 事件只是让消费者能够订阅和取消订阅它。引发事件的能力仅限于声明事件的类型层次结构。

允许所有订阅者也能够引发事件会有点困惑。假设我有一个 TextBox 类,它有一个 Focused 事件。如果任何老消费者可以引发该事件,那么当 TextBox 类实际上没有获得焦点时,Focused 事件很容易触发。这将使在事件期间几乎不可能保持任何类型的不变性。

关于c# - 为什么不能直接在外部调用公共(public)事件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21258675/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com