c#Action和Func(简单用法)

4 篇文章 0 订阅
1 篇文章 0 订阅

c#Action和Func

Action

  • 1.Action说明
    • Action是.NET Framework内置的泛型委托,可以使用Action委托以参数形式传递方法,而不用显示声明自定义的委托。封装的方法必须与此委托定义的方法签名相对应。也就是说,封装的方法必须具有一个通过值传递给它的参数,并且不能有返回值。
  • 2.Action 的特点
    •   	1.参数个0~16
      
    •     2.没有返回值.
      

3例子

using System;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class ActionDemo : MonoBehaviour
{

    Action  action;//表示无参
    Action<int> action1;//表示有传入参数int
    void 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了");
    }
}

    

结果
在这里插入图片描述

delegate 和 Action 写法对比

delegate 写法

 public delegate void CommonDelegate(string str);//定义委托
    void Start()
    {
        CommonDelegate common = Init;//实例化委托
        common("hello world");//执行
    }
    private void Init(string str)//放发
    {
        Debug.Log(str);//打印
    }

修改为Action 写法

    void Start()
    {
        Action<string> act = Init;
        act("hello world");
    }
    private void Init(string str)//放发
    {
        Debug.Log(str);//打印
    }

Action 代码更简洁点

Func

Func和Action相同点 :

		1. 都是0~16个参数 

不同点:

	   1.Func是有返回值的 而Action没有

Func的返回值

  • Func< T1 > (有返回值)------无参数类型,T1为返回值类型

  • Func<T1,T2>(有返回值)------T1为0-16个参数类型,T2为返回值类型

  • Func<T1,T2,T3>(有返回值)------T1和T2为0-16个参数类型,T3为返回值类型

  • 也就是说 参数最后一位就是返回值类型(返回值的类型和Func输出参数类型相同
    Func<int【参数类型】,……,bool【最后一个是返回值类型】】> func

代码示例

using System;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class FuncDemo : MonoBehaviour
{

    /*
       Func<参数.....> //参数最后一位就是 委托的 返回类型
     
     */

    void Start()
    {
        Func<string> MyFun1 = MyMethodA;//这样定义 就是 无参的Func 返回一个string  
        Debug.Log(MyFun1());//执行 这个委托

        Func<string,string> MyFun2 = MyMethodB;//这样定义 就是参数为string的Func 返回一个string值  
        Debug.Log(MyFun2("一个参数"));//执行 这个委托

        //一次类推 
        Func<string, string,bool> MyFun3 = MyMethodC;//这样定义 就是2个参数为string的Func 返回一个bool值  
        Debug.Log(MyFun3("一个参数","二个参数"));//执行 这个委托
    }

   

  
    //无参 返回string
    private string MyMethodA()
    {
        return "MyMethodA-->  hello world";
    }

    //一个string参数 +返回值string值
    private string MyMethodB(string arg)
    {
        return "MyMethodB-->  hello world  " + arg;
    }
    //两个string参数 +返回bool值
    private bool MyMethodC(string arg1, string arg2)
    {
        Debug.Log("MyMethodC-->  hello world  " + arg1 + "   " + arg2);
        return true;
    }


}

运行结果
在这里插入图片描述
简单的来说
有返回值就用Func,无返回值就用Action

  • 24
    点赞
  • 83
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Visual C# 2010新功能简介 动态支持(Dynamic Support) 通过Dynamic这一新类型,Visual C# 2010对后期绑定到动态类型提供了支持。这一附加能带来了许多新应用,包括简化访问COM API如Office Automation API,动态API如IronPython,以及HTML DOM。 Office编程能力 通过额外的命名参数和可选参数,动态类型,索引属性和可选ref修改器,访问COM接口包括Office Automation API的能力被大幅加强。 类型等价支持(Type Equivalence Support) 相比从主互操作程序集(Primary Interop Assembly)中导入类型信息,现在可以部署一款带有内嵌类型信息的应用。通过内嵌的类型信息,应用可在运行时间内使用类型而无需参考运行程序集。如果运行程序集发布了多种版本,那么包含内嵌类型信息的应用可以工作在多版本下而无需重新编译。 协变与逆变(Covariance and Contravariance) 相比泛型参数,协变能使用更具导出性的类型。而逆变则能使用更少导出性的类型。这就允许隐式变换定义类关键字来执行不同接口并通过不同的委托类型提供更灵活的运算方式。不同接口和委托可通过使用新的in和out语言关键字被创建。.NET Framework也可对某些现有泛型接口和委托带来不同的支持,包括IEnumerable<(Of <(T>)>)接口和Func<(Of <(TResult>)>) 与 Action<(Of <(T>)>) 委托。 新的命令行选项 /langversion命令行选项可让编译器接受只在特定C#版本中有效的语法。 /appconfig编译器选项可让C#应用指定程序集的应用配置文件位置。 Visual C# 集成了开发环境。以下部分对Visual Studio集成开发环境(IDE)的加强进行了描述。 调用层次结构(Call Hierarchy) 调用层次结构能通过你的代码进行导航并显示以下信息: · 到所选方式、属性和构造函数的所有调用。 · 接口成员的所有执行。 · 虚方法和抽象方法的所有覆盖。 这能让你更好地理解代码流动并评估代码变更的影响。
C#中的ActionFunc是两种常用的委托类型。Action是一个没有返回值的委托,而Func是一个有返回值的委托。\[1\] 在代码示例中,使用了FuncAction来定义委托并执行相应的方法。Func可以定义带有不同参数和返回值类型的委托,而Action只能定义带有参数但没有返回值的委托。\[1\] 在示例中,MyFun1是一个无参的Func委托,返回一个string值。MyFun2是一个带有一个string参数的Func委托,返回一个string值。MyFun3是一个带有两个string参数的Func委托,返回一个bool值。\[1\] 另外,示例中还展示了使用Action来定义委托的写法。在Start方法中,使用Action定义了一个带有一个string参数的委托act,并执行了Init方法。\[2\] 此外,还可以使用Lambda表达式来创建委托。Lambda表达式可以简化委托的定义和使用。在示例中,使用Lambda表达式创建了一个带有一个string参数的Action委托。\[3\] 总结来说,ActionFuncC#中常用的委托类型,用于定义不同参数和返回值类型的委托。Action用于定义没有返回值的委托,而Func用于定义有返回值的委托。可以使用Lambda表达式来简化委托的定义和使用。 #### 引用[.reference_title] - *1* *2* [c#ActionFunc简单用法)](https://blog.csdn.net/qq_39984000/article/details/115245134)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] - *3* [C#语法:C# 简述Actionfunction内置委托用法、Lambda 表达式创建委托最为方便](https://blog.csdn.net/qq_37271216/article/details/102801792)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值