1. 程式人生 > >C# Action委託、Func委託

C# Action委託、Func委託

如果我們要把方法當作引數傳遞的話就要用到委託。簡單來說委託是一個型別,這個型別可以賦值一個方法的引用。

一 . Action委託

action委託指向的方法沒有返回值

c#程式碼如下:

class ActionTest
    {
        void printStr()
        {
            Console.WriteLine("printStr()");
        }

        void printStr(int i)
        {
            Console.WriteLine(i);
        }

        public void mainAction()
        {
            // action後面可以通過泛型去指定action指向的方法的多個引數型別,引數的型別跟action後面宣告的委託型別是對應這的
            // action委託可以指向一個無返回值、無參的方法
            Action ac = printStr; // action是系統內建(預定義)的一個委託型別
            ac(); // 呼叫

            Action<int> ac2 = printStr; // 定義了一個委託型別,這個型別可以指向一個沒有返回值、有一個引數的方法.在這裡方法中的引數最多可以16個
            ac2(100);
        }

    }


二 . Func委託

如果委託需要有獲取返回值,那就要用到func委託

func委託要求必須指向帶返回值的方法

class FuncTest
    {
        // 如果委託需要有獲取返回值,那就要用到func委託
        // func委託要求必須指向帶返回值的方法

        int printInt()
        {
            return 999;
        }

        int printInt(string str)
        {
            Console.WriteLine(str);
            return 1000;
        }

        public void mainFunc()
        {
            Func<int> fu = printInt; // func中的泛型型別指定的是方法的返回值型別
            Console.WriteLine(fu());

            Func<string, int> fu2 = printInt;// func後面可以跟很多型別,前面的引數是引數型別,後面的是返回值型別,引數型別必須跟指定方法的引數型別對應
            Console.WriteLine(fu2("zhili"));
            Console.ReadKey();
        }
    }