Delegate、Action、Func的使用時機以及差異(Func篇)

  • 20058
  • 0
  • C♯
  • 2017-06-18

在上一篇文章中可以清楚的知道Action的用法,這篇再來看看Func怎麼寫囉。

那Func是什麼呢?

就是Action,但是 是會返回一個值的Action

 

如果分不清楚下列程式碼void跟string的差異,建議上一頁,這系列文章完全不適合現階段的你進行閱讀

        private void HelloVoid()
        {
        }

        private string HelloString()
        {
            return "HelloString";
        }

 


先來看看MSDN的Func

「這個委派所封裝之方法的傳回值。」

就是方法一定會傳回一個值。

直接來看Code吧!

using System;

namespace ConsoleApp5
{
    public class Class1
    {
        /* 在呼叫時,外部要傳入一個Func
         * Func 即是 有返回string型別的一個函式
         * 
         * 註※ Func<T>的T是個泛型的意思,換句話說可以自定義要返回的值
         * (不懂泛型會不懂這段的意思,建議先了解泛型)
         * 
         *      需要特別注意的是Func的最後一個T,永遠是返回的值,其餘的則是傳入的參數
         *      範例:Func<T,TResult>
         *      T      : 第一個T =>傳入參數
         *      TResult  :最後一個T =>返回值
         */
        public static void DelegateByFunc(Func<string> func)
        {
            // 外部傳入一個函式,在這邊做執行後返回一個外部函式給予的值            
            string str = func();

            // 透過函式返回一個值,在程式碼中把返回的值印出來
            Console.WriteLine(str);
        }
    }
}
using System;

namespace ConsoleApp5
{
    class Program
    {

        // 外部實做的有返回值的函式
        private static string Hello()
        {
           return "Hello World!";
        }

        static void Main(string[] args)
        {
            // 把Hello這個有返回值的函式當作參數傳遞
            Class1.DelegateByFunc(Hello);
        }        
    }
}

因此我們可以取透過外部,給予內部執行的程式碼,並且在內部執行,取得Hello World!這個字串

這樣就可以達到外部給程式碼,而內部實做的功能了!


LINE討論群FB討論區

歡迎您的加入,讓這個社群更加美好!

聯絡方式:
FaceBook
E-Mail