1. 程式人生 > >C#方法作引數——關於Action和Func的使用

C#方法作引數——關於Action和Func的使用

前言

C#用了4年了,之前一直對“委託”這個概念不是很理解,前幾天突然就豁然開朗了。所以在這裡記一下,希望這不僅是對自己成長的記錄,也能對小夥伴們有所幫助。

分析

C#委託,可以看成是一種函式指標,它將會非常有用當你想將某個方法作為引數傳入另外一個方法時(我也想吐槽一下這樣寫語序有些偏英文化,但是貌似這樣寫會使主體表達更連貫?)。

委託可以使用delegate實現,但本文所討論的是委託的另外兩種實現方式:Action和Func。相比delegate關鍵字,使用Action和Func會使程式碼更簡潔。Action和Func兩者的區別在於Action沒有返回值,而Func有返回值。

開始

本文將通過一個例子來介紹Action和Func的概念及使用方法。

開啟VS2017,新建控制檯應用,取名為ActionFuncTest,確定。

在這裡插入圖片描述

將Program.cs的程式碼替換為下面程式碼:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading;

namespace ActionFuncTest
{
    class Program
    {
        static int num = 0;
        static void Main(string[] args)
        {
            StartYourShow();
            Console.Read();
        }

        static void StartYourShow()
        {
            while (num < 5)
            {
                num += 1;
                Console.WriteLine("show");
            }
            Console.WriteLine("ShowEnd");
        }

    }
}

F5執行,你將會看到的結果如下圖所示:

在這裡插入圖片描述

我們分析一下StartYourShow這個方法的組成,它可以看做事由3部分組成的:

  1. 不終止條件(num<5)。或者說終止條件(num>=5)

  2. 迴圈事件(num+=1;Console.WriteLine(“show”);)

  3. 終止後事件(Console.WriteLine(“ShowEnd”)