简明的使用C#委托(delegate)

C#:委托(Delegate)

  • 委托类似于函数的指针。
  • 函数的声明需要和委托的声明一致。
  • 委托可作为参数传递至函数。
  • 委托的多播即一次调用多个函数。

C#中的委托类似于C或C++中函数的指针。委托是储存对某个方法的引用,其是一种引用类型变量。也可用于将方法作为参数传递给其他函数。

一、声明委托

委托声明决定了可由该委托引用的方法。换言之,委托只能实例化具有兼容签名和返回类型的函数

假设这里有一个这样的委托。

public delegate int MyDelegate (int num1, int num2);

其表示可以指向一个返回值是int类型,参数有两个int类型的函数。注意,这里需要引用的函数的声明必须和委托的声明一致,变量名可不一致,但一般不那么做。

二、实例化委托

还是使用上面的例子。我们这里现在有一个相加的函数。

public static int AddMethod(int num1, int num2)   // 这里static是为了方便在主函数中调用
{
	return num1 + num2;
}

现在我们在主函数中实例化我们的委托,并且调用。

static void Main(string[] args)
{
	MyDelegate myDelegate = new MyDelegate(AddMethod); // 将函数名作为参数传入即可
    // MyDelegate myDelegate = AddMethod;        // 第二种实例化的方法
    
    Console.WriteLine(myDelegate(10, 20));  
    
    // 控制台输出:
    // 30
}

这里有两种实例化委托的方法,第一种只要将把需要引用的方法名作为参数名传入即可。还有另一种方法,即直接将函数名作为右值。

三、将委托作为函数参数传递

委托其本质为引用类型变量,故可将其作为函数的参数传入。这还还是沿用前文所举的例子,首先实例化委托,并将其指向两数相加的函数。之后将此委托传入两数相乘的函数。

static void Main(string[] args)
{
	MyDelegate md = AddMethod;    // 实例化前文的两数相加函数

	Console.WriteLine(MulMethod(10, md));   // 将委托传递至乘法函数
    
    // 控制台输出:
    // 20
}

// 两数相乘的函数,注意此处参数列表
public static int MulMethod(int num1, MyDelegate handle)   
{
	return num1 * handle(1, 1);   // 计算 num1 * (1 + 1)
}

需要注意的是乘法函数中参数的声明,这里由于在前文创建的是MyDelegate委托,故此处也应是MeDelegate handle

四、委托的多播

如果希望一次委托调用多个函数该如何处理?只需要使用运算符“+”来将多个委托合并。同样的,使用运算符“-”可以移除合并的委托。

这里我们举一个例子,一个函数用来将全局函数num打印至控制台,一个函数用来修改num的值。此处例子与前文的例子没有关系,可单独观看。

public delegate void MyDelegate();

public static int num = 10;

public static void WriteToConsole()   // 输出至控制台
{
	Console.WriteLine(num);
}

public static void AddNum()   // 修改num的值
{
    num += 100;
}

static void Main(string[] args)
{
    MyDelegate md1 = new MyDelegate(WriteToConsole);   // 先创建两个委托
    MyDelegate md2 = new MyDelegate(AddNum);
    
    md1 += md2;   // 将两个委托相加
    md1();
    
    Console.WriteLine("现在的num的值为:{0}", num);
    
    // 控制台输出:
    // 10
    // 现在的num的值为:110
}

在创建组播的时候,首先创建多个委托,然后再将多个委托相加即可。注意这里两个函数是有先后顺序的。

可能还有更新,大概?

  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值