C#delegate基本使用

本文介绍了C#中的delegate概念及其使用方法。通过声明和实例化delegate,可以实现间接调用方法,例如GreetDelegate。示例展示了如何创建和使用delegate,包括单一方法调用和多个方法串联调用,以及在实际代码中的应用。
摘要由CSDN通过智能技术生成

C# delegate基本使用

delegate提供了一种间接调用函数的方式
比如我有一个SayHi函数

public void SayHi(string name)
{
  Console.WriteLine("hi " + name);
}

我如果想调用这个函数我可能需要这样
SayHi(“Alice”);
如果使用delegate的话,我可以不直接调用SayHi,而是去调用我的delegate间接调用SayHi,像这样
myDelegate(“Alice”);

delegate具体使用方法:

首先需要声明一个delegate,像这样

public delegate void GreetDelegate(string name);

这里GreetDelegate是我自己定义的delegate的名字,你当然可以换成别的名字;
void表明GreetDelegate间接调用的函数的返回值是void;
(string name)表明通过GreetDelegate间接调用的函数需要一个string类型的参数;

然后定义一些需要间接调用的方法例如

public void SayHi(string name)
{
  Console.WriteLine("hi " + name);
}
public void SayHello(string name)
{
  Console.WriteLine("hello " + name);
}

以上的方法都是符合GreetDelegate委托条件的,因为它们返回值都是void,并且需要接受一个string类型的参数,这些都是在我们声明GreetDelegate时就定义好的

之后我们就可以在Main函数中做一些测试了

using System;
namespace ConsoleApp1
{
  public delegate void GreetDelegate(string name);
  class Program
  {
    public void SayHi(string name)
    {
      Console.WriteLine("hi " + name);
    }
    public void SayHello(string name)
    {
      Console.WriteLine("hello " + name);
    }
    public static void Main(string[] args)
    {
      Program p = new Program();
      // 创建一个委托实例并把SayHi函数交个这个委托,这样调用委托时实际上是调用了SayHi
      GreetDelegate greetDelegate = new GreetDelegate(p.SayHi);
      greetDelegate("Alice");
      
      // 创建一个委托实例并把SayHi函数交个这个委托,这样调用委托时实际上是调用了SayHello
      GreetDelegate greetDelegate1 = new GreetDelegate(p.SayHello);
      greetDelegate1("Bob");
      
      // 创建一个委托实例并依次把SayHi、SayHi、SayHello函数交个这个委托,这样调用委托时实际上是依次调用了SayHi、SayHi、SayHello
      GreetDelegate greetDelegate2 = new GreetDelegate(p.SayHi);
      greetDelegate2 += new GreetDelegate(p.SayHi);
      greetDelegate2 += new GreetDelegate(p.SayHello);
      greetDelegate2("隔壁老王");
    }
  }
}

输出结果
hi Alice
hello Bob
hi 隔壁老王
hi 隔壁老王
hello 隔壁老王

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值