C# 委托和事件:从基础到实践

时间:2024-01-25 13:36:46

在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!”。