C# 事件(Event)的使用例子说明
例子一:按钮点击事件
假设我们有一个窗体应用程序,其中包含一个按钮。当用户点击该按钮时,我们希望执行一些特定的操作。这可以通过使用C#事件来实现。
首先,我们需要定义一个事件处理程序,它将在按钮被点击时执行。在C#中,事件处理程序是一个方法,它具有与事件相匹配的签名。例如,对于按钮的点击事件,我们可以定义一个名为Button_Click的方法:
private void Button_Click(object sender, EventArgs e)
{
// 执行特定的操作
}
然后,在窗体的构造函数中,我们可以将Button_Click方法与按钮的Click事件关联起来:
public Form1()
{
InitializeComponent();
button1.Click += new EventHandler(Button_Click);
}
现在,当用户点击按钮时,Button_Click方法将被调用,并执行特定的操作。
例子二:自定义事件
除了使用内置的事件(如按钮的Click事件),我们还可以创建自定义事件。这在需要通知其他对象发生特定事件的情况下非常有用。
假设我们有一个名为TemperatureSensor的类,它模拟了一个温度传感器。当温度超过某个阈值时,我们希望通知其他对象。我们可以通过定义一个名为TemperatureChanged的事件来实现:
public class TemperatureSensor
{
public event EventHandler<TemperatureChangedEventArgs> TemperatureChanged;
private int temperature;
public int Temperature
{
get { return temperature; }
set
{
if (value != temperature)
{
temperature = value;
OnTemperatureChanged(new TemperatureChangedEventArgs(temperature));
}
}
}
protected virtual void OnTemperatureChanged(TemperatureChangedEventArgs e)
{
TemperatureChanged?.Invoke(this, e);
}
}
public class TemperatureChangedEventArgs : EventArgs
{
public int Temperature { get; }
public TemperatureChangedEventArgs(int temperature)
{
Temperature = temperature;
}
}
在TemperatureSensor类中,我们定义了一个TemperatureChanged事件,并在温度发生变化时调用OnTemperatureChanged方法来触发事件。该事件使用了自定义的TemperatureChangedEventArgs参数,它包含了温度的值。
现在,其他类可以订阅TemperatureChanged事件,并在温度发生变化时执行相应的操作。例如,我们可以创建一个名为TemperatureLogger的类,它将温度写入日志文件:
public class TemperatureLogger
{
public TemperatureLogger(TemperatureSensor sensor)
{
sensor.TemperatureChanged += new EventHandler<TemperatureChangedEventArgs>(Sensor_TemperatureChanged);
}
private void Sensor_TemperatureChanged(object sender, TemperatureChangedEventArgs e)
{
// 将温度写入日志文件
Console.WriteLine("Temperature changed: " + e.Temperature);
}
}
在TemperatureLogger的构造函数中,我们订阅了TemperatureChanged事件,并指定了一个事件处理程序。当TemperatureChanged事件被触发时,Sensor_TemperatureChanged方法将被调用,并将温度写入日志文件。
现在,当TemperatureSensor的温度发生变化时,TemperatureLogger将收到通知并执行相应的操作。
例子三:事件的多播
事件还支持多播(Multicast),即一个事件可以有多个事件处理程序。这允许多个对象同时订阅同一个事件
免责声明:本文由用户上传,此文本数据来源于原作者,如有侵权请联系删除!转载此文是出于传递更多信息之目的。若有来源标注错误或侵犯了您的合法权益,请作者持权属证明与本网联系,我们将及时更正、删除,谢谢。