C#学习笔记(二十六)委托、lambda表达式、LINQ-核心知识:泛型委托的类型推断功能。

本文详细介绍了C#中的委托概念,它作为方法的包装器,允许间接调用或可替换的调用,类似于C++的函数指针。通过实例展示了如何声明、实例化和使用委托,包括多播委托的实现。此外,还讲解了泛型委托、Action和Func的使用,以及Lambda表达式的简洁语法,展示了它们在方法调用和类型推断中的应用。最后提到了LINQ中的查询操作及其与Lambda表达式的结合使用。

委托

 委托是类类型的一种,委托也是一种类。类类型是引用类型的一种。

委托类型其实就是一种方法的包装器、封装器。

为了使程序可以更换要被调用的函数,同时不想让两个函数紧耦合,此时就需要通过委托来进行间接调用、或者可替换的调用。C和C++中通过函数指针来实现,C#中就要通过委托来实现。Java中如果想要实现这个功能必须要使用接口。

委托是一个函数,或者一组函数的封装器、包装器。

函数的封装叫委托。表面看是函数名的传递,其实是函数逻辑的传递、函数体算法的传递。

委托的声明:

声明委托这种类时看上去很像声明函数签名。需要告诉委托类型,在委托类型包裹函数时,能够包裹什么样的函数、委托的实例里面可以包裹什么样的函数。

如果一个委托的实例可以包装某个方法的话:约定:声明委托类型时用的返回值类型、以及参数列表一定要跟被包裹的函数的返回值类型参数列表一致才可以。函数签名必须相同

如上图,声明的委托类型,标明需要委托的函数返回值为空,参数列表也要为空。只有符合这种特征的函数才可以被我们这个MyDele类型的委托来委托。

委托的最基本用法

我们写一个符合委托要求的函数:无返回值,无参数列表。

using System;

namespace DelegateExample
{
    delegate void MyDele();
    class Program
    {
        static void Main(string[] args)
        {
            MyDele dele1 = new MyDele(M1);  //实例化委托。
        }

        static void M1()
        {
            Console.WriteLine("M1 is called!");
        }
    }
}

此时dele1这个变量引用着一个MyDele类型的实例,这个实例里“包裹”着M1这个方法。

包裹着这样有啥用呢?

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值