C#委托(Delegate、Action、Func)体验

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个参数可以指定,不能指定返回值

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个参数并返回 TResult 参数指定的类型值的方法

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;
    }
}
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 136,307评论 19 139
  • 前言 把《C++ Primer》[https://book.douban.com/subject/25708312...
    尤汐Yogy阅读 9,618评论 1 51
  • 网上讲C#委托和事件的博文已经非常多了,其中也不乏一些深入浅出、条理清晰的文章。我之所以还是继续写,主要是借机整理...
    丑小丫大笨蛋阅读 1,801评论 0 5
  • 无论什么事情,看你怎样看待,无论你遭遇了什么,就算你从死之的边缘走过,请记住:就当那是生活对你的历练,...
    梦之海L阅读 128评论 0 0
  • 窥荷望山的俗阅读 351评论 0 0

友情链接更多精彩内容