C#委托(Delegate)精讲

前言:C#中的委托类似于C或C++中函数的指针。委托是存有对某个方法的引用的一种引用类型变量,引用可在运行时被改变。更多关于委托的内容,请查看:浅谈C#中Action、Func与Predicate委托

文章目录

    • 一、委托概念
    • 二、声明委托
    • 三、使用委托

一、委托概念

委托类型表示对具有特定参数列表和返回类型的方法的引用。 通过委托,可以将方法视为可分配给变量并可作为参数传递的实体。

二、声明委托

在C#中使用一个类分两个阶段,首选定义这个类,告诉编译器这个类由什么字段和方法组成的,然后使用这个类实例化对象。在我们使用委托的时候,也需要经过这两个阶段,首先定义委托,告诉编译器我们这个委托可以指向哪些类型的方法,然后,创建该委托的实例。

定义委托的语法如下:

delegate void IntMethod(int x);

定义了一个委托叫做IntMethod,这个委托可以指向什么类型的方法呢?我们必须明确,首先这个方法要带有一个int类型的参数,并且方法的返回值是void的。

定义一个委托要定义方法的参数和返回值,使用关键字delegate定义,如下:

delegate double DoubleMethod(double x,double y);
delegate string StringMethod();

注意:如果我们要把方法当做参数来传递的话,就要用到委托。简单来说,委托是一个类型,这个类型可以赋值一个方法的引用。

三、使用委托

  1. 首先,创建一个委托,如下:
// 定义一个返回值为string的委托类型
private delegate string StringDel();
  1. 在主函数里,调用这个委托,如下:
int x = 30;
// 使用委托类型,创建实例
StringDel stringDel = new StringDel(x.ToString); // stringDel指向x中的ToString方法
// 通过委托实例(对象)去调用x中的ToString方法
Console.WriteLine(stringDel());
// 查看类型是否转换成功
Console.WriteLine(stringDel().GetType());

通过上面这个例子,我们可以很清楚的看到,我把ToString()这个方法的引用赋给了这个委托,同时这个委托的返回值是string,此时,我们这个委托就可以实现ToString()这个方法的作用了。

  1. 执行效果
    在这里插入图片描述
  2. 总结

在这里我们首先使用StringDel委托声明了一个类型叫做stringDel,接下来使用new对它进行初始化,使它引用到x中的ToString()方法上,这样stringDel就相当于x.ToString,我们通过stringDel()执行方法就相当于x.ToString()

  1. 补充

通过上面的委托示例,调用方法还有另一种方法,如下:

// 直接将x的ToString方法的引用,赋给stringDel 
StringDel stringDel = x.ToString;
// 通过Invoke方法调用stringDel所引用的方法
Console.WriteLine(stringDel.Invoke());
Console.WriteLine(stringDel.Invoke().GetType());

注意:通过委托类型去调用一个方法,跟直接调用这个方法作用是一样的。

你可能感兴趣的:(C#)