2018-07-24【c#】委托 delegate

委托 是 <事件/回調(diào)函數(shù)> 的基礎(chǔ)
1.最簡單的委托

image.png
using System;
using System.Collections.Generic;
using System.Text;

namespace Delegate
{
    delegate int NumberChanger(int num);

    class Program
    {
        static int num = 1;

        static void Main(string[] args)
        {
            NumberChanger nm = new NumberChanger(AddNum);
            int a = nm(5);
            Console.WriteLine(a);

            nm = new NumberChanger(DecNum);
            a = nm(5);
            Console.WriteLine(a);

            Console.ReadLine();
        }

        public static int AddNum(int p)
        {
            num += p;
            return num;
        }

        public static int DecNum(int p)
        {
            num -= p;
            return num;
        }
    }
}

2.multicasting delegate
有一個委托列表,按順序執(zhí)行,可以加減

using System;
using System.Collections.Generic;
using System.Text;

namespace Delegate
{
    // Muti-casting delegate
    delegate void D(int x);

    class Program
    {

        static void Main(string[] args)
        {
            D fc1 = new D(C.FUNC1);
            fc1(111);

            D fc2 = new D(C.FUNC2);
            fc2(222);

            D fc3 = fc1 + fc2;
            fc3(333);

            Console.ReadLine();
        }
    }

    class C
    {
        public static void FUNC1(int i)
        {
            Console.WriteLine("Func1: " + i);
        }

        public static void FUNC2(int i)
        {
            Console.WriteLine("Func2: " + i);
        }

        public void FUNC3(int i)
        {
            Console.WriteLine("Func3: " + i);
        }
    }
}

3.上述簡易寫法,直接 += 函數(shù)名


image.png

4.事件event
事件是一個修飾符,用來修飾Delegate實例,目的是讓這個實例只能在聲明該實例的類的內(nèi)部觸發(fā)
見下圖:

image.png

image.png

image.png
image.png

5.回調(diào)函數(shù)
回調(diào)函數(shù),其實就是通過代理,傳遞相同格式的函數(shù)指針,看了一個例子可以實現(xiàn)一種簡單的適配器模式。


image.png

6.Action(無返回值格式代理簡化版)/Func(有返回值格式代理簡化版)
例:(Ps:Func泛型列表最后一個為返回值類型)
相對于直接調(diào)用委托,我更喜歡 .Invoke()方式,這讓我能明確知道這是個委托

image.png

7.事件參數(shù),通過lambda表達式,傳遞到監(jiān)聽者


image.png

image.png
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • Swift1> Swift和OC的區(qū)別1.1> Swift沒有地址/指針的概念1.2> 泛型1.3> 類型嚴謹 對...
    cosWriter閱讀 11,681評論 1 32
  • 1.ios高性能編程 (1).內(nèi)層 最小的內(nèi)層平均值和峰值(2).耗電量 高效的算法和數(shù)據(jù)結(jié)構(gòu)(3).初始化時...
    歐辰_OSR閱讀 30,282評論 8 265
  • 1、通過CocoaPods安裝項目名稱項目信息 AFNetworking網(wǎng)絡(luò)請求組件 FMDB本地數(shù)據(jù)庫組件 SD...
    陽明AI閱讀 16,228評論 3 119
  • 一、Socket又稱"套接字” 網(wǎng)絡(luò)上的兩個程序通過一個雙向的通信連接實現(xiàn)數(shù)據(jù)的交換,這個連接的一端稱為一個soc...
    阿凡提說AI閱讀 168評論 0 0
  • 我再次失眠 /為月亮的清輝/一次次起身 /看天邊的浮云 /納木措的藍 /洗凈我的哀傷 /五千米的山風 /濕潤我的雙...
    硯硯小屋閱讀 444評論 0 0

友情鏈接更多精彩內(nèi)容