C#委托(Delegate、Action、Func)體驗(yàn)

delegate

最基本的委托形式,必須要先定義委托

class DelegateDemo
{
    //定義委托
    public delegate void Run();
    public Run r;
    public DelegateDemo()
    {
        addDelegate(run1);
        addDelegate(run2);
        addDelegate(run3);
        addDelegate(run4);
        addDelegate(run4);
        r();
    }

    void addDelegate(Run fun)
    {
        if (r == null)
        {
            r = fun;
        }
        else
        {
            r += fun;
        }
    }

    public void run1()
    {
        Console.WriteLine("Delegate_1");
    }

    public void run2()
    {
        Console.WriteLine("Delegate_2");
    }

    public void run3()
    {
        Console.WriteLine("Delegate_3");
    }

    public void run4()
    {
        Console.WriteLine("Delegate_4");
    }
}

action

委托的泛型,具有N個(gè)參數(shù)可以指定,不能指定返回值

class ActionDemo
{
    public Action<string> act;
    public ActionDemo()
    {
        addDelegate(run1);
        addDelegate(run2);
        addDelegate(run3);
        addDelegate(run4);
        addDelegate(run4);
        act("a");
    }

    void addDelegate(Action<string> fun)
    {
        if (act == null)
        {
            act = fun;
        }
        else
        {
            act += fun;
        }
    }

    public void run1(string key)
    {
        Console.WriteLine("Action_1");
    }

    public void run2(string key)
    {
        Console.WriteLine("Action_2");
    }

    public void run3(string key)
    {
        Console.WriteLine("Action_3");
    }

    public void run4(string key)
    {
        Console.WriteLine("Action_4");
    }
}

Func

委托的泛型,具有N個(gè)參數(shù)并返回 TResult 參數(shù)指定的類型值的方法

class FuncDemo
{
    public Func<string, int> act;
    public FuncDemo()
    {
        addDelegate(run1);
        addDelegate(run2);
        addDelegate(run3);
        addDelegate(run4);
        addDelegate(run4);
        act("a");
    }

    void addDelegate(Func<string, int> fun)
    {
        if (act == null)
        {
            act = fun;
        }
        else
        {
            act += fun;
        }
    }

    public int run1(string key)
    {
        Console.WriteLine("Func_1");
        return 0;
    }

    public int run2(string key)
    {
        Console.WriteLine("Func_2");
        return 0;
    }

    public int run3(string key)
    {
        Console.WriteLine("Func_3");
        return 0;
    }

    public int run4(string key)
    {
        Console.WriteLine("Func_4");
        return 0;
    }
}
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

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

  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 136,534評(píng)論 19 139
  • 前言 把《C++ Primer》[https://book.douban.com/subject/25708312...
    尤汐Yogy閱讀 9,661評(píng)論 1 51
  • 網(wǎng)上講C#委托和事件的博文已經(jīng)非常多了,其中也不乏一些深入淺出、條理清晰的文章。我之所以還是繼續(xù)寫,主要是借機(jī)整理...
    丑小丫大笨蛋閱讀 1,804評(píng)論 0 5
  • 無(wú)論什么事情,看你怎樣看待,無(wú)論你遭遇了什么,就算你從死之的邊緣走過,請(qǐng)記住:就當(dāng)那是生活對(duì)你的歷練,...
    夢(mèng)之海L閱讀 132評(píng)論 0 0
  • 窺荷望山的俗閱讀 354評(píng)論 0 0

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