- A+
所属分类:.NET技术
运行环境: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 了