c#中的委托与事件

本文详细介绍了C#中的委托和事件。委托是函数或方法的指针,支持多播,常用于异步编程模型和事件。事件是基于委托的通知机制,允许对象发布和订阅事件。文中还讨论了自定义事件委托类型以及使用事件时的注意事项。
摘要由CSDN通过智能技术生成

 在C#中,委托与事件是不容易弄清楚的两个概念。本文主要介绍这两个概念以及它们的用法。

 

一、委托

       首先,我们来看委托。委托本质上是函数或方法的指针,也就是说,委托对象的值就是指向一个方法的指针。因此,对于一个委托类型,可以创建它的实例,并使这个实例指向一个具体的方法。而这个方法的签名(即方法的参数个数、每个参数的类型以及方法的返回值)必须要与委托类型的定义一致。无论方法具体完成什么功能,只要其签名与委托定义一致即可。在C#中,定义委托使用delegate关键字。来看一个例子,以下是在C#中定义的一个委托类型: 

public delegate int Calc(int a, int b);

       它包括两个整型参数,其返回值也是整型。这个委托类型的实例可以指向与此签名相同的方法。比如,有以下四个方法,分别是对两个整数进行加、减、乘、除的运算: 

public class DelegateTest {
   public int Add(int a, int b) {
      Console.WriteLine($"{nameof(Add)}:{a}+{b}={a + b}");
      return a + b;
    }
    public int Subtract(int a, int b) {
      Console.WriteLine($"{nameof(Subtract)} : {a}-{b}={a - b}");
      return a - b;
    }
    public int Multiply(int a, int b) {
      Console.WriteLine($"{nameof(Multiply)}:{a}*{b}={a * b}");
      return a * b;
    }
    public int Divide(int a, int b){
      Console.WriteLine($"{nameof(Divide)}:{a}/{b}={a / b}");
      return a / b;
    }
}

 那么,就可以定义四个Calc委托实例,分别指向每个不同的方法。

static void Main(string[] args) {
    DelegateTest delegateTest = new DelegateTest();
    // 定义四个Calc委托实例
    Calc calcAdd = new Calc(delegateTest.Add);
    Calc calcSubtract = new Calc(delegateTest.Subtract);
    Calc calcMultiply = new Calc(delegateTest.Multiply);
   
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值