C# 事件发布、订阅、监听和触发示例程序解析
该程序为一个简单的事件发布、订阅、监听和触发的示例程序,主要涉及的类、字段、方法和语句如下:
-
'TestEventSource' 类:事件源类,定义了 'TestEventArgs' 类、'TestEventHandler' 委托和 'TestEvent' 事件,以及 'RaiseEvent' 方法。
-
'TestEventArgs' 类:继承自 'EventArgs' 类,定义了一个只读的字符类型字段 'KeyToRaiseEvent',表示要触发的事件的参数。
-
'TestEventHandler' 委托:定义了一个方法签名,接收两个参数,一个是 'object' 类型的事件源对象 'sender',另一个是 'TestEventArgs' 类型的事件参数 'e'。
-
'TestEvent' 事件:使用 'TestEventHandler' 委托类型作为事件类型,表示当事件被触发时所要执行的方法列表。
-
'RaiseEvent' 方法:接收一个字符类型的参数 'keyToRaiseEvent',创建一个 'TestEventArgs' 对象,并通过 'TestEvent' 事件触发该事件。
-
'TestEventListener' 类:事件监听器类,定义了 'KeyPressed' 方法、'Subscribe' 方法和 'UnSubscribe' 方法。
-
'KeyPressed' 方法:是一个事件处理程序,接收两个参数,一个是 'object' 类型的事件源对象 'sender',另一个是 'TestEventArgs' 类型的事件参数 'e',用于处理 'TestEvent' 事件被触发时所要执行的逻辑。
-
'Subscribe' 方法:接收一个 'TestEventSource' 类型的参数 'evenSource',将自身的 'KeyPressed' 方法添加到 'evenSource' 的 'TestEvent' 事件的方法列表中,表示订阅该事件。
-
'UnSubscribe' 方法:接收一个 'TestEventSource' 类型的参数 'evenSource',将自身的 'KeyPressed' 方法从 'evenSource' 的 'TestEvent' 事件的方法列表中移除,表示取消订阅该事件。
-
'Main' 方法:程序的入口,创建 'TestEventSource' 对象和 'TestEventListener' 对象,然后通过 'TestEventListener' 对象订阅 'TestEventSource' 对象的 'TestEvent' 事件并触发该事件,最后再取消订阅该事件并再次触发该事件。
namespace Homework
{
public class TestEventSource
{
public class TestEventArgs : EventArgs
{
public readonly char KeyToRaiseEvent;
public TestEventArgs(char keyToRaiseEvent)
{
KeyToRaiseEvent = keyToRaiseEvent;
}
}
public delegate void TestEventHandler(object sender, TestEventArgs e);
public event TestEventHandler TestEvent;
public void RaiseEvent(char keyToRaiseEvent)
{
TestEventArgs e = new TestEventArgs(keyToRaiseEvent);
if (TestEvent != null)
TestEvent(this, e);
}
}
public class TestEventListener
{
public void KeyPressed(object sender, TestEventSource.TestEventArgs e)
{
Console.WriteLine('发送者:{0},所按得健为:{1}', sender, e.KeyToRaiseEvent);
}
public void Subscribe(TestEventSource evenSource)
{
evenSource.TestEvent += new TestEventSource.TestEventHandler(KeyPressed);
}
public void UnSubscribe(TestEventSource evenSource)
{
evenSource.TestEvent -= new TestEventSource.TestEventHandler(KeyPressed);
}
}
class Program
{
static void Main(string[] args)
{
TestEventSource es = new TestEventSource();
TestEventListener el = new TestEventListener();
Console.WriteLine('订阅事件\n');
el.Subscribe(es);
Console.WriteLine('输入一个字符,再按enter键');
string s = Console.ReadLine();
es.RaiseEvent(s.ToCharArray()[0]);
Console.WriteLine('\n取消订阅事件\n');
el.UnSubscribe(es);
Console.WriteLine('输入一个字符,再按enter健');
s = Console.ReadLine();
es.RaiseEvent(s.ToCharArray()[0]);
}
}
}
通过以上示例程序,可以更清晰地理解事件发布、订阅、监听和触发机制在 C# 中的应用。
原文地址: https://www.cveoy.top/t/topic/nryP 著作权归作者所有。请勿转载和采集!