在C#中,委托和事件是两个核心概念,它们使得开发者能够实现基于事件的编程模型。委托允许将方法作为参数传递,而事件则是委托的封装,使得开发者可以订阅和触发这些委托。
一、委托的定义和用法
委托是一种特殊的类型,它代表了一个具有特定参数列表和返回类型的函数。这个函数可以由任何方法匹配。在C#中,可以使用delegate
关键字来定义委托。
下面是一个简单的委托示例:
public delegate int BinaryOp(int x, int y);
这个委托可以接受两个整数参数并返回一个整数。接下来,我们可以定义一个符合这个委托签名的方法:
public int Add(int x, int y)
{
return x + y;
}
现在,我们可以将这个方法赋值给委托变量:
BinaryOp binaryOp = Add;
最后,我们可以调用委托:
int result = binaryOp(10, 20); // result 的值为 30
二、事件:委托的封装
事件是对委托的封装,它允许外部类订阅和触发这个委托。在C#中,可以使用event
关键字来定义事件。
下面是一个简单的事件示例:
public class Button
{
public event EventHandler Click;
protected virtual void OnClick()
{
Click?.Invoke(this, EventArgs.Empty);
}
}
在这个例子中,我们定义了一个Click
事件,它使用了EventHandler
委托。当按钮被点击时,OnClick
方法会被调用,并触发Click
事件。外部类可以订阅这个事件:
Button button = new Button();
button.Click += (sender, e) => { Console.WriteLine("Button clicked!"); };
现在,当按钮被点击时,控制台会输出“Button clicked!”。