C#中的委托使用

 更新时间:2016年07月03日 15:23:55   投稿:hebedich  
委托是C#中新加入的一个类型,可以把它想作一个和Class类似的一种类型,和使用类相似,使用一个委托时,需要两个步骤,首先你要定义一个委托,就像是定义一个类一样;然后,你可以创建一个或多个该委托的实例。

从今天开始写关于C#的系列文章,本篇文章主要讲解C#中的委托使用。

委托其实就是一种数据类型,和int,string是一样的概念。

如果要把一个字符串赋值给一个变量,用string声明一个变量即可。如果要把一个方法赋值给一个变量,那么用什么关键字呢?当然就是用委托了,所以用委托声明的变量就可以接受一个方法了,之后那个变量就可以像方法一样执行。

下面开始详细介绍:

先看一段代码:

 static void Main(string[] args)
 {
   int i;      //可以接受一个整数的变量
   string str;    //可以接受一个字符串的变量
 }

在Main方法内声明了2个变量:i和str。大家都很熟悉的代码,变量i表明它可以接受一个整数,变量str表明它可以接受一个字符串。

那么如果我想声明一个变量既可以接受整数又可以接受字符串,那该用什么数据类型来声明这样的变量呢?

答案很简单:用class。

public class MyClass
{
  public int i { get; set; }    //接受整数
  public string str { get; set; } //接受字符串
}

那么我们就创建了一种数据类型:MyClass,用它声明的变量可以同时接受一个整数和一个字符串。

如下:

static void Main(string[] args)
{
  MyClass obj = new MyClass();
  obj.i =1;
  obj.str ="我是字符串";
}

 现在问题来了:我想要一种数据类型可以声明一个变量用于接受一个方法。

既然这种数据类型要接受一个方法,那我们先看看方法长什么样:

 public string Method(int m,int n)
 {
   return "";
 }

上面的Method方法最主要的特点就是这个方法的输入参数数据类型与输出的数据类型。

 通常我们会调用各种方法,调用方法前我们会确定方法的输入参数的数据类型和方法输出的数据类型,至于方法的主体我们通常不关心,方法的主体由方法编程人员去完成即可。

所以我们编写一个方法,调用一个方法前都要明确的方法的输入输出数据类型。

对于上面Method方法的输入数据类型为2个整数,输出的是一个字符串。

现在我们要声明一个变量来接受这个方法,那么这个变量的数据类型也应该要明确输入,输出的数据类型。那么我们应该定义符合那个方法输入与输出一致的数据类型。

public class Test
{
  //这种数据类型可以接受一个方法
  public delegate string MethodDelegate(int i1,int i2);
}

好了,我已经声明了和上面Method方法一样的输入与输出类型的一个数据类型了:MethodDelegate。

那么我们就可以用这个数据类型来接受Mehtod方法了,完整代码如下:

class Program
{
  //这种数据类型可以接受一个方法
  public delegate string MethodDelegate(int i1, int i2);

  /// <summary>
  /// 我们可以用MethodDelegate声明一个变量来接受方法了
  /// </summary>
  public void Test()
  {
    MethodDelegate IamMethod = Method;  //把下面那个Method方法赋值给变量了。
    var result=IamMethod(1, 2);     //然后把这个变量当作方法一样执行即可。
  }
  
  public string Method(int m, int n)
  {
    return "";
  }  
}

在上面第4行:我们用delegate关键字声明了一种数据类型:这种数据类型和我们想要接受什么样方法的输入输出类型保持一致就可以了。

那么上面的MethodDelegate就可以接受带2个int类型的输入参数并且返回类型是string的任何方法了。

现在我们发现委托和int,string是一样的概念,只不过,int用来接受整数,string用来接受字符串,delegate用来声明一种数据类型接受方法。

相关文章

  • C#基于Twain协议调用扫描仪,设置多图像输出模式(Multi image output)

    C#基于Twain协议调用扫描仪,设置多图像输出模式(Multi image output)

    这篇文章主要介绍了C#基于Twain协议调用扫描仪,设置多图像输出模式(Multi image output)的方法,帮助大家更好的理解和使用c#,感兴趣的朋友可以了解下
    2021-01-01
  • C#索引器简单实例代码

    C#索引器简单实例代码

    打开.Net Framework源代码随便看几个类,就会发现索引器的影子。索引器可以被重载,可以接收一个或者多个参数,但是不可以定义为静态的。可以用关联数组的方式访问索引器。
    2013-03-03
  • C#中事件只能在内部调用的原因分析

    C#中事件只能在内部调用的原因分析

    事件(Event) 基本上说是一个用户操作,如按键、点击、鼠标移动等等,或者是一些提示信息,如系统生成的通知。应用程序需要在事件发生时响应事件,这篇文章主要介绍了C#中事件为什么只能在内部调用,需要的朋友可以参考下
    2021-11-11
  • C#使用FileInfo和DirectoryInfo类来执行文件和文件夹操作

    C#使用FileInfo和DirectoryInfo类来执行文件和文件夹操作

    System.IO.FileInfo 和 System.IO.DirectoryInfo 是C#中用于操作文件和文件夹的类,它们提供了许多有用的方法和属性来管理文件和文件夹,这篇文章主要介绍了C#使用FileInfo和DirectoryInfo类来执行文件和文件夹操作,需要的朋友可以参考下
    2023-08-08
  • C#面向对象设计的七大原则

    C#面向对象设计的七大原则

    这篇文章主要为大家详细介绍了C#面向对象设计的七大原则,未读文章之前大家说一说都有哪七大原则,是不是七大原则都可以全部列出,想要了解的朋友可以参考一下
    2016-05-05
  • C#实现自定义线程池实例代码

    C#实现自定义线程池实例代码

    这篇文章介绍了C#实现自定义线程池的实例代码,文中通过示例代码介绍的非常详细。对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-07-07
  • C#多线程系列之读写锁

    C#多线程系列之读写锁

    本文详细讲解了C#多线程的读写锁,文中通过示例代码介绍的非常详细。对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-02-02
  • C#中登录窗体和欢迎窗体关闭方法分析

    C#中登录窗体和欢迎窗体关闭方法分析

    这篇文章主要介绍了C#中登录窗体和欢迎窗体关闭方法,实例分析了C#中登录窗体和欢迎窗体关闭时出现错误的原因与解决方法,是C#项目开发中非常实用的技巧,需要的朋友可以参考下
    2014-12-12
  • WPF使用DrawingContext实现绘制刻度条

    WPF使用DrawingContext实现绘制刻度条

    这篇文章主要为大家详细介绍了如何利用WPF DrawingContext实现绘制刻度条,文中的示例代码讲解详细,对我们学习或工作有一定帮助,感兴趣的小伙伴可以了解一下
    2022-09-09
  • C#中out保留字用法实例分析

    C#中out保留字用法实例分析

    这篇文章主要介绍了C#中out保留字用法,实例分析了方法返回值时采用out保留字的用法,需要的朋友可以参考下
    2014-09-09

最新评论