委托、匿名、lamda表达式概念与实例(总结篇)

概述

委托、匿名、lamda表达式三者相当于递进的关系。一开始现有委托,而后基于委托衍生匿名,再简化为lamda表达

一、委托

	int a = 5;
    Console.WriteLine(a);

这里定义一个变量5,a指向5的地址;
函数也有自己的地址,那么也可以像定义变量一样,定义一个变量指向这个函数,这也就是委托变量类型,用来指向函数。

        public void Base(int a)
        {

        }

变量可以作为参数传给一个函数,委托变量也能以参数方式传给一个函数。

1.完整实例

定义一个委托并使用

using System;

namespace delegate_lamda
{
    class Program
    {
        static void Main(string[] args)
        {
        //第三步 f1赋给了委托变量D1
            D1 d = f1;
            //第四步 调用d来执行委托
            d();
        }
        // 第二步 这里定义了一个函数f1
        static void f1()
        {
            Console.WriteLine("我是委托所指的函数");
        }
    }
    //第一步 这里定义了一个委托变量,他指向的是一个方法
    delegate void D1();
}

委托以参数传入一个方法中

这里以参数方式传入 Console.WriteLine();方法中,用来打印函数执行结果

using System;

namespace delegate_lamda
{
    class Program
    {
        static void Main(string[] args)
        {
            D2 d2 = f2;
            Console.WriteLine(d2());
           
        }

        static string f2()
        {
            return "我以参数的形式传入方法";
        }
    }
    delegate string D2();
}

二、匿名

匿名函数是对委托的简化与衍生。
原先是三步走,定义函数,定义委托,函数赋给委托,
使用匿名后,可以直接一步搞定。

using System;

namespace delegate_lamda
{
    class Program
    {
        static void Main(string[] args)
        {
           //这里delegata没有委托变量名,直接写入方法体
            Action a = delegate () { Console.WriteLine("我是匿名函数"); };
            
            a();
        }
}

Acton 是内置定义的一个无返回值的委托。

三、lamda

lamda是对匿名进一步的衍生简化

using System;

namespace delegate_lamda
{
    class Program
    {
        static void Main(string[] args)
        {
        //系统内置的需要有返回值的委托类型
            Func<int, int> f3 = (int i) =>
             {
                 return i;
             };
            Console.WriteLine( $"我是lamda函数,传入值是{f3(5)}");
        }

}

把delegate标识符省略,直接用下列格式
(这里是参数)=>{这里是方法体}

posted @   有诗亦有远方  阅读(20)  评论(0编辑  收藏  举报  
相关博文:
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现
点击右上角即可分享
微信分享提示