在线搭建网站,深圳品牌策划vi设计,房产网 最新楼盘价格,网站开发html工具Action和delegate类似但没有返回值 Action和delegate在C#编程语言中有明显的区别#xff0c;主要体现在它们的定义、用途和特性上。
1. 定义
Delegate#xff1a;Delegate是C#中用于定义方法签名的类型#xff0c;它允许将方法作为参数传递#xff0c;或者将方法赋值给变…Action和delegate类似但没有返回值 Action和delegate在C#编程语言中有明显的区别主要体现在它们的定义、用途和特性上。
1. 定义
DelegateDelegate是C#中用于定义方法签名的类型它允许将方法作为参数传递或者将方法赋值给变量。Delegate是一种类型安全的函数指针至少可以有0个参数最多可以有32个参数并且既可以没有返回值也可以指定返回值类型。ActionAction是C#中的一个泛型委托它特别用于表示无返回值的方法。Action至少可以有0个参数最多可以有16个参数且这些方法都不应该有返回值。Action内部实际也是使用delegate实现的但当普通的delegate定义的参数与Action的个数、类型一致时Action提供了一种更简洁、规范的表示方式。
2. 用途
Delegate由于其灵活性和强大的功能Delegate在C#中被广泛用于回调方法、事件处理、异步编程等场景。它可以引用任何与定义的方法签名相匹配的方法包括静态方法和实例方法。ActionAction主要用于表示那些执行某些操作但不返回任何结果的方法。它简化了无返回值方法的委托声明使得代码更加简洁易读。在需要传递无返回值方法作为参数或返回值的场景中Action是一个很好的选择。
3. 特性
Delegate具有高度的灵活性和可重用性可以引用多种类型的方法包括静态方法和实例方法。同时Delegate支持链式调用通过和-操作符允许将多个委托组合成一个委托链。Action作为无返回值的泛型委托Action提供了一种更简洁、规范的表示方式。与普通的Delegate相比它在声明和使用时更加直观和方便。此外由于Action的泛型特性它还可以轻松地处理不同数量和类型的参数。
4. 示例 Delegate示例 public delegate int AddDelegate(int a, int b);
public static int Add(int a, int b) { return a b; } AddDelegate del new AddDelegate(Add);
int result del(1, 2); // 结果为3 Action示例 Actionint, int act (a, b) Console.WriteLine(a b);
act(1, 2); // 输出3
类似函数指针代码示例
using System;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;public class ActionDemo : MonoBehaviour
{Action action;//表示无参Actionint action1;//表示有传入参数intvoid Start(){action actionH1;//没有参数action();action1 actionH2;//一个 int参数 action1(456);actionH3(() { Debug.Log(执行完actionH3了); });//lambda 表达式 来执行委托actionH3(actionH4);//执行完 actionH3后回调 actionH4方法}private void actionH1()//没有参数{Debug.Log(123);}private void actionH2(int index)//参数int{Debug.Log(index);}private void actionH3(Action act)//参数 Action{Debug.Log(在执行actionH3);act();//回调 这个 委托方法}private void actionH4()//执行完 actionH3后的回调执行{Debug.Log(执行完actionH3了);}
}
综上所述Action和Delegate在C#中各有其独特的定义、用途和特性。选择使用哪一个主要取决于具体的编程需求和场景。