.Net常见问题之C#中的委托

所属分类: 软件编程 / C#教程 阅读数: 72
收藏 0 赞 0 分享

有朋友说委托和C++中的函数指针很像,但是两者真的有差别。在C++中,函数指针不是类型安全的,它所指向的是内存中的某一个位置,但是我们没有办法判断这个指针实际指向的是什么,对于参数和返回类型更难以判断了。但是.NET中的委托则完全不同,它是类型比较安全的类,我们很明白的知道委托定义的返回类型和参数类型。它不仅包含了方法的引用,而且包含了方法的引用。下面通过一段代码给大家分享下对委托的理解:

什么是委托

  在实际的开发过程中,有时某个方法执行的操作并不是针对数据进行的,而是针对另一个方法,但是这个方法在编译时又无法得知,只能在运行时才知道。如果是针对数据做操作,只需将数据作为方法的参数传入即可,那么针对方法做操作,很明显将方法作为参数传入即可,听起来的确很奇怪,但是需要先接受这个现实,然后从使用中去体会它的含义。下面举一个例子(请原谅我的英语 ,my english is poor!),这样一个场景:媒婆给菇凉或者小伙介绍对象,如果是对象是男的,菇凉就说出她的联系方式,如果是女的,小伙就说出他的联系方式(PS:我们这里都是正常的性取向)。

看一下代码图

在命名空间里,定义一个委托,和类是平级的

 

复制代码 代码如下:

 public delegate string GetTelphone();
  //用来得到联系方式的。

概述中提到,委托可以定义返回类型和参数类型,那么这个委托的返回类型就是string,无参的。

继续。。。。

媒婆类:

/// <summary>
/// 媒婆
/// </summary>
class MeiPo
{
  public string Sex { get; set; }
  public void GetTel(GetTelphone getTelphone)
  {
    Console.WriteLine(getTelphone.Invoke());
  }
}

可以看到,GetTel方法的参数是一个委托类型的,和一般的基本类型和常见引用类型引用方式一样使用。然后再方法体执行委托方法,输出结果。

菇凉类:

/// <summary>
/// 菇凉
/// </summary>
class Girl
{
  public string GetGirlTel()
  {
    return "得到菇凉的电话";
  }
}

小伙类:

  

 /// <summary>
  /// 男屌丝
  /// </summary>
  class DiaoSi
  {
    public string GetBoyTel()
    {
      return "得到男屌丝的电话";
    }
  }

最后上测试类

       

static void Main(string[] args)
    {
      var redMun = new MeiPo {Sex = "男"};
      var del= new GetTelphone(new Girl().GetGirlTel);
      if(redMun.Sex=="女")
        del = new GetTelphone(new DiaoSi().GetBoyTel);
      redMun.GetTel(del);

      Console.ReadKey();
    }

执行步骤:

1、创建媒婆对象,媒婆介绍一个sex="男",

2、创建委托对象,委托是一个类,所以用new来实例化。委托即指方法的引用,所在初始化时传入指向的方法引用new Girl().GetGrilTel

3、如果媒婆介绍的是sex="女",那么委托指向另一个方法

4、媒婆对象调用GetTel得到联系方式

以上内容就是对委托介绍的全部内容,希望大家喜欢。

更多精彩内容其他人还在看

c#开发word批量转pdf源码分享

已经安装有Office环境,借助一些简单的代码即可实现批量Word转PDF,看下面的实例源码吧
收藏 0 赞 0 分享

c# xml API操作的小例子

这篇文章主要介绍了c# xml API操作的小例子,有需要的朋友可以参考一下
收藏 0 赞 0 分享

c#唯一值渲染实例代码

这篇文章主要介绍了c#唯一值渲染实例代码,有需要的朋友可以参考一下
收藏 0 赞 0 分享

淘宝IP地址库采集器c#代码

这篇文章主要介绍了淘宝IP地址库采集器c#代码,有需要的朋友可以参考一下
收藏 0 赞 0 分享

C#在后台运行操作(BackgroundWorker用法)示例分享

BackgroundWorker类允许在单独的专用线程上运行操作。如果需要能进行响应的用户界面,而且面临与这类操作相关的长时间延迟,则可以使用BackgroundWorker类方便地解决问题,下面看示例
收藏 0 赞 0 分享

c#文本加密程序代码示例

这是一个加密软件,但只限于文本加密,加了窗口控件的滑动效果,详细看下面的代码
收藏 0 赞 0 分享

c#生成站点地图(SiteMapPath)文件示例程序

这篇文章主要介绍了c#生成站点地图(SiteMapPath)文件的示例,大家参考使用
收藏 0 赞 0 分享

C# 键盘Enter键取代Tab键实现代码

这篇文章主要介绍了C# 键盘Enter键取代Tab键实现代码,有需要的朋友可以参考一下
收藏 0 赞 0 分享

C# WinForm导出Excel方法介绍

在.NET应用中,导出Excel是很常见的需求,导出Excel报表大致有以下三种方式:Office PIA,文件流和NPOI开源库,本文只介绍前两种方式
收藏 0 赞 0 分享

C#串口通信程序实例详解

在.NET平台下创建C#串口通信程序,.NET 2.0提供了串口通信的功能,其命名空间是System.IO.Ports,创建C#串口通信程序的具体实现是如何的呢?让我们开始吧
收藏 0 赞 0 分享
查看更多