在C#中,事件通常由发布者(即拥有该事件的对象)来触发。这通常在某些特定的操作或状态更改时发生。事件的触发是通过调用类似于方法的事件委托来完成的。
以下是一个简单的示例,展示了如何定义和触发一个事件。
using System;
public class DataProvider
{
// 定义事件
public event EventHandler<DataEventArgs> DataUpdated;
// 定义用于传递数据的EventArgs派生类
public class DataEventArgs : EventArgs
{
public double NewData { get; }
public DataEventArgs(double newData)
{
NewData = newData;
}
}
// 某个方法,当数据更新时触发事件
public void UpdateData(double newData)
{
Console.WriteLine("Data is updated.");
// 触发事件
DataUpdated?.Invoke(this, new DataEventArgs(newData));
}
}
public class Program
{
static void Main()
{
var provider = new DataProvider();
// 订阅事件
provider.DataUpdated += (sender, e) => {
Console.WriteLine(#34;Received updated data: {e.NewData}");
};
// 触发数据更新,这会间接触发事件
provider.UpdateData(42);
}
}
在这个例子中,我们定义了一个名为DataProvider的类,该类有一个DataUpdated事件。我们在UpdateData方法中触发了这个事件。在主函数Main中,我们订阅了这个事件,并提供了一个当事件触发时要执行的委托(也就是一个匿名方法)。
这样,当UpdateData方法被调用(模拟数据的更新)时,所有订阅了DataUpdated事件的方法都会被调用。
这是一个非常简单的例子,但它展示了如何定义、触发和订阅事件的基本概念。在复杂的应用程序中,这些概念可以用于建立非常灵活和强大的交互模式。