C# 两个类间传递消息

运行环境:Window10,.Net7.0; 编者:乌龙哈里 2023-01-13


经常碰到两个控件需要相互传递消息,这时候需要用到事件。比如现有两个类如下:

class AA
{
    private string Text = "AA";

    public void SetText(string s)
    {
        Text = s;
    }
    public void Show()
    {
        Console.WriteLine(Text);
    }
}

class BB
{
    private string Text = "BB";
    public void OnClick()
    {

    }
}

我们需要 BB.OnClick() 后把 AA 的 Text 字段内容变成 BB.Text 的内容。这时候需要事件。事件按我的理解就是把 AA 的一个方法弄到 BB 内执行。在本文中就是 BB 也能执行 AA.SetText(string s) 这个方法。
在BB类内改造步骤:
1、根据 AA类的方法 void SetText(string s) 在 BB类 中声明一个代理 public delegate void SetValue(string s);
2、再把代理声明成事件 public event SetValue SetValueEvent;
3、最后,在 BB 类的 OnClick() 方法中运行事件。
改完的 BB 类如下:

class BB
{
    private string Text = "BB";

    public delegate void SetValue(string s);
    public event SetValue? SetValueEvent;

    public void OnClick()
    {
        if (SetValueEvent != null)
        {
            SetValueEvent(Text);
        }
    }
}

 


整体运行如下:

var aa = new AA();
var bb = new BB();

aa.Show();//=>输出:AA
//把 BB 的事件绑定到 AA 的 SetText 方法
bb.SetValueEvent += aa.SetText;

//运行 BB 调用事件的方法 OnClick()
bb.OnClick();

aa.Show();//=>输出:BB。aa.Text 的内容已经改变成 BB 了

 

posted @ 2023-01-13 17:03  乌龙哈里  阅读(160)  评论(0编辑  收藏  举报