使用事件机制的好处例子说明

发布时间:2023年12月26日

不使用事件机制

class Button
{
    public void OnClick()
    {
        // 调用文本框的方法显示消息
        TextBox.ShowMessage("按钮被点击了!");

    }
}

class TextBox
{
    public static void ShowMessage(string message)
    {
        Console.WriteLine(message);
    }
}

如果你想要在按钮被点击时执行其他操作,比如弹出一个对话框,那么你就需要修改按钮的代码

class Button
{
    public void OnClick()
    {
        // 调用文本框的方法显示消息
        TextBox.ShowMessage("按钮被点击了!");

        // 新增功能,在按钮被点击时弹出一个对话框
        DialogBox.ShowDialog("您点击了按钮!");
    }
}

class TextBox
{
    public static void ShowMessage(string message)
    {
        Console.WriteLine(message);
    }
}

这样做的问题是,按钮和文本框之间的耦合度变高了,按钮需要直接调用文本框的方法来显示消息,并且还需要负责弹出对话框。如果你想要在其他地方也执行弹出对话框的操作,那么也需要在其他地方重复这些代码,导致代码冗余和维护成本高。

如果你使用事件机制,你可以将弹出对话框的操作封装成一个事件处理程序,然后在需要执行这个操作的地方订阅该事件即可,不需要修改按钮的代码:?

class Button
{
    // 定义一个事件,表示按钮被点击的事件
    public event EventHandler Click;

    public void OnClick()
    {
        // 触发按钮被点击的事件
        Click?.Invoke(this, EventArgs.Empty);
    }
}

class TextBox
{
    public void ShowMessage(object sender, EventArgs e)
    {
        Console.WriteLine("按钮被点击了!");
    }
}

class DialogBox
{
    public static void ShowDialog(object sender, EventArgs e)
    {
        Console.WriteLine("您点击了按钮!");
    }
}

class Program
{
    static void Main(string[] args)
    {
        Button button = new Button();
        TextBox textBox = new TextBox();
        DialogBox dialogBox = new DialogBox();

        // 将文本框的 ShowMessage 方法和对话框的 ShowDialog 方法注册为按钮被点击时的事件处理程序
        button.Click += textBox.ShowMessage;
        button.Click += dialogBox.ShowDialog;

        // 模拟按钮点击
        button.OnClick();

        Console.ReadLine();
    }
}

这样做的好处是,不需要修改按钮的代码,只需要在需要让按钮执行其他操作时,将对应的事件处理程序注册为按钮的事件处理程序即可。这就体现了事件机制的解耦和可扩展性。

文章来源:https://blog.csdn.net/weixin_54498280/article/details/135214783
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。