c# 委託的使用(delegate,Func,Action和委託的lamdba形式

1.場景

使用委託實現兩數相加並輸出的場景,來進行各種委託的實現。

2.代碼

  基礎方法,兩個最簡單基礎操作方法

        //兩數相加方法
        public int Add(int i,int j)
        {
            return i + j;
        }
        //輸出結果方法
        public void print(string s)
        {
            Console.Write(s);
        }

(1)最基礎的形式

        先定義委託(全局變量):

//加法
delegate int AddHander(int i, int j);
//輸出
delegate void Print(string msg);

        使用:

        public void Show1()
        {
            AddHander add = Add;
            Print pr = print;
            //下面兩種都可以
            //pr(add(1, 2).ToString());
            pr.Invoke(add.Invoke(1, 2).ToString());
        }

        這樣既可得到輸出。

(2)基礎形式

         不定義全局直接使用。注意Func<T1,T2,T3...,RETURN T> 和Action<T...>的使用

        public void Show2()
        {
            Func<int, int, int> add = Add;
            Action<string> pr = print;
            pr(add(1, 2).ToString());
        }

           或者等價於:

        public void Show3()
        {
            Func<int, int, int> add = new Func<int, int, int>(Add);
            Action<string> pr = new Action<string>(print);
            pr(add(1, 2).ToString());
        }

(3)直接一個方法裏面完成所有操作(無需上面定義的Add和print方法,直接完成)

        public void Show4()
        {
            Func<int, int, int> add = new Func<int, int, int>(delegate(int i,int j) {
                return i + j;
            });
            Action<string> pr = new Action<string>(delegate(string s) {
                Console.Write(s);
            });
            pr(add(1, 2).ToString());
        }

(4)直接一個方法裏面完成所有操作(無需上面定義的Add和print方法,使用lambda簡化委託)

        public void Show5()
        {
            Func<int, int, int> add = new Func<int, int, int>((i,j)=> {
                return i + j;
            });
            Action<string> pr = new Action<string>((s)=> {
                Console.Write(s);
            });
            pr(add(1, 2).ToString());
        }

   注意此處的lamdba形式。此法最爲簡潔優雅(代碼量最小,最整齊)

3.總結

以上即爲委託的各種形式的使用方法。其中lamdba尤爲簡潔美觀好用,基礎類型較少使用

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章