最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

淺談C#中Action和Func回調(diào)的常用方式

 更新時(shí)間:2022年03月22日 10:47:58   作者:熊思雨  
Action和Func泛型委托實(shí)際上就是一個(gè).NET?Framework預(yù)定義的委托,本文主要介紹了C#中Action和Func回調(diào)的常用方式,具有一定的參加價(jià)值,感興趣的可以了解一下

一、簡(jiǎn)介

Action和Func泛型委托實(shí)際上就是一個(gè).NET Framework預(yù)定義的委托,3.5引入的特性?;竞w了所有常用的委托,所以一般不用用戶重新聲明。Action系列泛型委托,是沒有返回參數(shù)的委托,最多可以有16參數(shù),也可以沒有參數(shù)。

Func系列的委托是有返回值的委托,最多可以有16個(gè)參數(shù);元組是C# 4.0引入的一個(gè)新特性,編寫的時(shí)候需要基于.NET Framework 4.0或者更高版本。元組使用泛型來簡(jiǎn)化一個(gè)類的定義.提供用于創(chuàng)造元組對(duì)象的靜態(tài)方法。最多可以提供創(chuàng)建新的 8 元組,即八元組。

二、Action

委托其實(shí)就是把方法當(dāng)作參數(shù)來調(diào)用,Action就是其中之一,Action 作為參數(shù)不能有返回值,參數(shù)可以是任意類型,也可以不傳遞參數(shù)。

例1

調(diào)用某個(gè)類中的Action

using System;
 
namespace Test1
{
    internal class Program
    {
        static void Main(string[] args)
        {
            Test1 test1 = new Test1();
            test1.myAction();
 
            Console.ReadKey();
        }
    }
 
    public class Test1
    {
        public Action myAction = null;
 
        private void sayHi()
        {
            Console.WriteLine("fuck you!");
        }
 
        public Test1()
        {
            myAction = sayHi;
        }
    }
}

運(yùn)行:

這種方式用的比較少,Action常用的方式通常是用來作為和回調(diào) 

例2

執(zhí)行一系列的操作后,再執(zhí)行回調(diào),也是比較推薦的使用方式。

using System;
 
namespace Test1
{
    internal class Program
    {
        static void Main(string[] args)
        {
            Test1 test1 = new Test1();
            test1.Calculation(1, 2, ReceiveResult);
 
            Console.ReadKey();
        }
 
        private static void ReceiveResult(int res)
        {
            Console.WriteLine("結(jié)算的結(jié)果是:" + res);
        }
    }
 
    public class Test1
    {
        public void Calculation(int x, int y, Action<int> call)
        {
            if (call != null)
            {
                call(x + y);
            }
        }
    }
}

運(yùn)行:

將方法換成 Lambda 表達(dá)式,效果一樣的,關(guān)于Lambda的使用方法,可以參考:點(diǎn)擊跳轉(zhuǎn)

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
 
namespace Test1
{
    internal class Program
    {
        static void Main(string[] args)
        {
            Test1 test1 = new Test1();
            test1.Calculation(1, 2, (int res) =>
            {
                Console.WriteLine("結(jié)算的結(jié)果是:" + res);
            });
 
            Console.ReadKey();
        }
    }
 
    public class Test1
    {
        public void Calculation(int x, int y, Action<int> call)
        {
            if (call != null)
            {
                call(x + y);
            }
        }
    }
}

三、Func

上面使用Action的案例中,執(zhí)行回調(diào)后,都沒有返回值,這是因?yàn)锳ction并不能接收返回值,如果想執(zhí)行回調(diào),又有返回值怎么辦呢,F(xiàn)unc就是用來解決這個(gè)問題的。

Func 必須有一個(gè)返回值,否則會(huì)報(bào)錯(cuò),如下圖:

返回值通常是在參數(shù)的最后一個(gè),參考例1,F(xiàn)unc<int, float, string> MyFunc = null 這個(gè)委托中,string 就是返回值,傳遞參數(shù)的時(shí)候,也只能傳遞兩個(gè)參數(shù),如果再多寫一個(gè)參數(shù)就會(huì)報(bào)錯(cuò),如下圖:

例1

基本的用法,func賦值,執(zhí)行委托,并接收返回值

using System;
 
namespace Test1
{
    internal class Program
    {
        static void Main(string[] args)
        {
            Test1 test1 = new Test1();
            string userName = test1.MyFunc(15, 180.2f);
            Console.WriteLine(userName);
 
            Console.ReadKey();
        }
    }
 
    public class Test1
    {
        public Func<int, float, string> MyFunc = null;
 
        private string GetUserName(int age, float height)
        {
            if (age == 15 && height == 180.2f)
            {
                return "張三";
            }
            return null;
        }
 
        public Test1()
        {
            MyFunc = GetUserName;
        }
    }
}

運(yùn)行:

例2

 把func作為方法的參數(shù)傳遞,并執(zhí)行回調(diào)

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
 
namespace Test1
{
    internal class Program
    {
        static void Main(string[] args)
        {
            Test1 test1 = new Test1();
            Func<string> func = () => 
            {
                string name = "張三";
                string feel = "精力非常旺盛";
                string msg = name + feel;
                return msg;
            };
            test1.Calculation(10, 12, func);
            Console.ReadKey();
        }
    }
 
    public class Test1
    {
        public void Calculation(int x,int y, Func<string> sayFunc)
        {
            if(sayFunc != null)
            {
                int age = x + y;
                string msg = string.Format("年齡是:{0},對(duì)年齡的感受:{1}", age, sayFunc());
                Console.WriteLine(msg);
            }
        }
    }
}

運(yùn)行:

上面代碼只是作為一個(gè)參考,讀者可以根據(jù)自己的需求做一個(gè)改進(jìn)。

結(jié)束

到此這篇關(guān)于淺談C#中Action和Func回調(diào)的常用方式的文章就介紹到這了,更多相關(guān)C# Action和Func回調(diào)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 基于WebRequest.RegisterPrefix的使用詳解

    基于WebRequest.RegisterPrefix的使用詳解

    本篇文章對(duì)WebRequest.RegisterPrefix的使用進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下
    2013-05-05
  • 使用C#在Excel工作表中查找與替換數(shù)據(jù)的操作指南

    使用C#在Excel工作表中查找與替換數(shù)據(jù)的操作指南

    在日常業(yè)務(wù)中,Excel 常用于保存產(chǎn)品清單、客戶信息、銷售記錄等結(jié)構(gòu)化數(shù)據(jù),本文將介紹如何使用 C# 在 Excel 中高效完成查找與替換操作,并結(jié)合一個(gè)實(shí)際業(yè)務(wù)場(chǎng)景表格數(shù)據(jù)進(jìn)行演示,示例涵蓋從加載文件、查找目標(biāo)數(shù)據(jù)到替換與保存完整流程,需要的朋友可以參考下
    2025-11-11
  • WinForm遍歷窗體所有子控件的方法

    WinForm遍歷窗體所有子控件的方法

    這篇文章主要介紹了WinForm遍歷窗體所有子控件的方法,涉及C#遞歸遍歷相關(guān)操作技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下
    2016-07-07
  • C#實(shí)現(xiàn)QQ聊天窗口

    C#實(shí)現(xiàn)QQ聊天窗口

    這篇文章主要為大家詳細(xì)介紹了C#實(shí)現(xiàn)QQ聊天窗口,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-02-02
  • 淺談C# 中的委托和事件

    淺談C# 中的委托和事件

    本篇文章主要介紹C# 中的委托和事件,委托和事件在 .Net Framework中的應(yīng)用非常廣泛,有興趣的可以了解一下。
    2016-12-12
  • C#設(shè)置輸入法實(shí)例分析

    C#設(shè)置輸入法實(shí)例分析

    這篇文章主要介紹了C#設(shè)置輸入法的方法,實(shí)例分析了C#獲取系統(tǒng)輸入法及設(shè)置輸入法的相關(guān)技巧,需要的朋友可以參考下
    2015-05-05
  • C# WinForm制作異形窗體與控件的方法

    C# WinForm制作異形窗體與控件的方法

    這篇文章主要介紹了C# WinForm制作異形窗體與控件的方法,結(jié)合實(shí)例形式分析了WinForm制作異形窗體與控件的原理、實(shí)現(xiàn)步驟與相關(guān)操作技巧,需要的朋友可以參考下
    2017-05-05
  • C#創(chuàng)建線程帶參數(shù)的方法

    C#創(chuàng)建線程帶參數(shù)的方法

    本文給大家介紹C#創(chuàng)建線程帶參數(shù)的方法,包括無參數(shù)線程的創(chuàng)建,帶一個(gè)參數(shù)線程的創(chuàng)建及帶兩個(gè)及以上參數(shù)線程的創(chuàng)建,非常不錯(cuò),具有參考借鑒價(jià)值,感興趣的朋友一起看下吧
    2016-07-07
  • 詳談C++引用&和指針在作為形參時(shí)的區(qū)別

    詳談C++引用&和指針在作為形參時(shí)的區(qū)別

    下面小編就為大家?guī)硪黄斦凜++引用&和指針在作為形參時(shí)的區(qū)別。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2017-03-03
  • C#實(shí)現(xiàn)一個(gè)Word保護(hù)性模板文件

    C#實(shí)現(xiàn)一個(gè)Word保護(hù)性模板文件

    這篇文章主要為大家詳細(xì)介紹了C#如何實(shí)現(xiàn)一個(gè)Word保護(hù)性模板文件,文中的示例代碼講解詳細(xì),具有一定的借鑒價(jià)值,需要的小伙伴可以參考一下
    2024-01-01

最新評(píng)論

津市市| 长顺县| 黎平县| 花垣县| 石楼县| 莱西市| 通海县| 江安县| 丹棱县| 界首市| 东至县| 襄汾县| 隆德县| 舟山市| 左贡县| 法库县| 聂荣县| 紫金县| 濮阳县| 巴南区| 镇江市| 固始县| 延庆县| 太仆寺旗| 乌鲁木齐县| 双峰县| 道孚县| 墨竹工卡县| 定兴县| 宾川县| 新建县| 迁西县| 连平县| 南开区| 平果县| 高邑县| 靖西县| 卓资县| 新邵县| 徐州市| 望谟县|