Linq如何使用(一)委托Delegate

为了更好的了解Linq,分了四篇文章来总结,可能需要有一定的Linq使用经验,先简单介绍下委托的使用,不引申太多


委托(Delegate)是存有对某个方法的引用的一种引用类型变量,引用可在运行时被改变。 类似与 int i=5,委托可认为是方法的一个类型,像int。

C# 提供了两个泛型委托Action、Func,基本满足对委托的声明,也是目前最常用的

  • Action 无返回值的泛型委托
  • Func 必须有返回值的泛型委托
  • Predicate 有且只有一个参数,返回值只为 bool 类型
  • delegate 自定义委托

无返回值的委托示例

// 无参数,无返回值
委托1 d1_1 = new 委托1(A.fun1);
d1_1();
委托1 d1_2 = A.fun1;
d1_2();
Action d1_3 = A.fun1;
d1_3();
//有参数,无返回值
委托2 d2 = A.fun2;
d2("song");
Action<string> d2_1 = A.fun2;
d2_1("song");

delegate void 委托1();
delegate void 委托2(string msg);
class A
{
    public static void fun1()
    {
        Console.WriteLine("无参数");
    }
    public static void fun2(string str)
    {
        Console.WriteLine(str);
    }
}

最原始的方式

委托1 d1_1 = new 委托1(A.fun1);
d1_1();

简化版方式1

委托1 d1_2 = A.fun1;
d1_2();

使用微软的Action,不使用自定义的委托1

Action d1_3 = A.fun1;
d1_3();

有返回值示例

Func<int, int, string> sum = A.Add;
Console.WriteLine(sum(1,2));

var sum1 = A.Add;//var 自动推断类型,由此也可加深理解委托其实就是一个方法的类型
Console.WriteLine(sum1(1, 2));

class A
{
    public static string Add(int a, int b)
    {
        return $"{a+b}";
    }
}

其它不再示例说明,都类似
Linq如何使用(二)Lambda 声明委托Delegate - 简书 (jianshu.com)
Linq如何使用(三)使用Linq-自己写一个实现方法 - 简书 (jianshu.com)
Linq如何使用(四)-哪些地方用,如何用 - 简书 (jianshu.com)

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容