本例子是一个关于委托的小例子[猫叫,狗跳,人喊]。仅供学习分享使用,如有不足之处,还请指正。

概述

委托是C#开发中一个非常重要的概念,理解起来也和常规的方法不同,但一旦理解清楚,就可以信手拈来,随处可用。

委托是对方法的抽象。它存储的就是一系列具有相同签名和返回回类型的方法的地址。调用委托的时候,委托包含的所有方法将被执行。

涉及知识点

委托的定义

  • 以deleagate关键字开头。
  • 返回类型+委托类型名+参数列表。

效果图

如下【点击打开猫,弹出CatForm,点击喵喵按钮,触发事件,调用其他类的委托】:

核心代码

代码如下:

  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;
  5.  
  6. namespace DemoDelegate
  7. {
  8. public delegate void Handler();//定义一个委托类型
  9. /// <summary>
  10. /// 猫猫
  11. /// </summary>
  12. public class Cat
  13. {
  14.  
  15. public Handler Miao;
  16.  
  17. /// <summary>
  18. /// Miao叫的动作
  19. /// </summary>
  20. public void MaioMiao()
  21. {
  22. var action = Miao;
  23. if (action != null)
  24. {
  25. action();
  26. }
  27. }
  28. }
  29. }
  30. ///////////////////////////////////////////////////
  31. using System;
  32. using System.Collections.Generic;
  33. using System.Linq;
  34. using System.Text;
  35.  
  36. namespace DemoDelegate
  37. {
  38. /// <summary>
  39. /// 可爱的狗狗
  40. /// </summary>
  41. public class Dog
  42. {
  43. public Handler Tiao;
  44.  
  45. /// <summary>
  46. /// 狗跳的动作
  47. /// </summary>
  48. public void DogTiao()
  49. {
  50. var action = Tiao;
  51. if (action != null)
  52. {
  53. action();
  54. }
  55. }
  56. }
  57. }
  58.  
  59. ///////////////////////////////////////////////
  60.  
  61. using System;
  62. using System.Collections.Generic;
  63. using System.Linq;
  64. using System.Text;
  65.  
  66. namespace DemoDelegate
  67. {
  68. /// <summary>
  69. /// 主人
  70. /// </summary>
  71. public class Master
  72. {
  73. public Handler Han;
  74.  
  75. public void HanJiao()
  76. {
  77. var action = Han;
  78. if (action != null)
  79. {
  80. action();
  81. }
  82. }
  83.  
  84. }
  85. }

界面类代码如下:

  1. using System;
  2. using System.Collections.Generic;
  3. using System.ComponentModel;
  4. using System.Data;
  5. using System.Drawing;
  6. using System.Linq;
  7. using System.Text;
  8. using System.Windows.Forms;
  9.  
  10. namespace DemoDelegate
  11. {
  12. public partial class MainForm : Form
  13. {
  14. private Dog dog;
  15.  
  16. private Master master;
  17.  
  18. public MainForm()
  19. {
  20. InitializeComponent();
  21. InitInfo();
  22. }
  23.  
  24. /// <summary>
  25. /// 初始化信息
  26. /// </summary>
  27. private void InitInfo() {
  28. dog = new Dog();
  29. dog.Tiao += TiaoMethod;
  30. master = new Master();
  31. master.Han += HanMethod;
  32. }
  33.  
  34. /// <summary>
  35. /// 喵喵
  36. /// </summary>
  37. /// <param name="sender"></param>
  38. /// <param name="e"></param>
  39. private void btnCatMiao_Click(object sender, EventArgs e)
  40. {
  41. CatForm catForm = new CatForm();
  42. catForm.MiaoAction += MaioMethod;
  43. catForm.ShowDialog();
  44. }
  45.  
  46. private void MaioMethod(object sender,EventArgs e) {
  47. this.txtCat.Text = "猫在父页面叫了";
  48. this.dog.DogTiao();
  49. this.master.HanJiao();
  50. }
  51.  
  52. private void TiaoMethod()
  53. {
  54. this.txtDog.Text = "狗跳了";
  55. }
  56.  
  57. private void HanMethod()
  58. {
  59. this.txtMaster.Text = "别叫了";
  60. }
  61. }
  62. }
  63. /////////////////////////////////////////////////////////////////
  64. using System;
  65. using System.Collections.Generic;
  66. using System.ComponentModel;
  67. using System.Data;
  68. using System.Drawing;
  69. using System.Linq;
  70. using System.Text;
  71. using System.Windows.Forms;
  72.  
  73. namespace DemoDelegate
  74. {
  75. public partial class CatForm : Form
  76. {
  77. private Cat cat;
  78.  
  79. public event EventHandler MiaoAction;
  80.  
  81. public CatForm()
  82. {
  83. InitializeComponent();
  84. InitInfo();
  85. }
  86.  
  87. public void InitInfo() {
  88. cat = new Cat();
  89. cat.Miao += MaioMethod;
  90. }
  91.  
  92. private void MaioMethod()
  93. {
  94. this.txtCat.Text = "猫叫了";
  95. var action = MiaoAction;
  96. if (action != null) {
  97. action(cat, null);
  98. }
  99. }
  100.  
  101. private void btnCatMiao_Click(object sender, EventArgs e)
  102. {
  103. this.cat.MaioMiao();
  104. }
  105. }
  106. }

关于委托,功能和用途还有很多,这里只是抛砖引玉,希望能对大家有帮助

源码下载

C# 关于委托的小例子的更多相关文章

  1. C#利用事件与委托进行窗体间传值简单小例子

    本篇博客是利用C#委托与事件进行窗体间传值的简单小例子 委托与事件的详细解释大家可以参照张子阳的博客: http://www.tracefact.net/CSharp-Programming/Dele ...

  2. 前端的CRUD增删改查的小例子

    前端的CRUD增删改查的小例子 1.效果演示 2.相关代码: <!DOCTYPE html> <html lang="en"> <head> & ...

  3. 通俗易懂,C#如何安全、高效地玩转任何种类的内存之Span的脾气秉性(二)。 异步委托 微信小程序支付证书及SSL证书使用 SqlServer无备份下误删数据恢复 把list集合的内容写入到Xml中,通过XmlDocument方式写入Xml文件中 通过XDocument方式把List写入Xml文件

    通俗易懂,C#如何安全.高效地玩转任何种类的内存之Span的脾气秉性(二).   前言 读完上篇<通俗易懂,C#如何安全.高效地玩转任何种类的内存之Span的本质(一).>,相信大家对sp ...

  4. springmvc入门的第一个小例子

    今天我们探讨一下springmvc,由于是初学,所以简单的了解一下 springmvc的流程,后续会持续更新... 由一个小例子来简单的了解一下 springmvc springmvc是spring框 ...

  5. java即时通信小例子

    学习java一段时间了,今天写来一个即时通信的小例子练手在其过程中也学到了一些知识拿出来和大家分享,请路过的各位大神多多赐教... 好了下面讲一下基本的思路: 首先,编写服务器端的程序,简单点说吧就是 ...

  6. Runtime的几个小例子(含Demo)

    一.什么是runtime(也就是所谓的“运行时”,因为是在运行时实现的.)           1.runtime是一套底层的c语言API(包括很多强大实用的c语言类型,c语言函数);  [runti ...

  7. bootstrap 模态 modal 小例子

    bootstrap 模态 modal  小例子 <html> <head> <meta charset="utf-8" /> <title ...

  8. INI配置文件分析小例子

    随手写个解析INI配置字符串的小例子 带测试 #include <iostream> #include <map> #include <string> #inclu ...

  9. JavaScript小例子:复选框全选

    JavaScript小例子:复选框全选 这只是一个小例子,很简单,但是这个功能还是很常用的: 实现后效果如图: JavaScript代码: <script type="text/jav ...

随机推荐

  1. 软件开发人员真的了解SQL索引吗(索引使用原则)

    原文:软件开发人员真的了解SQL索引吗(索引使用原则) 前两篇文章我总结了一些SQL数据库索引的问题,这篇主要来分析下索引的优缼点,以及如何正确使用索引.       索引的优点:这个显而易见,正确的 ...

  2. Mac OSX操作系统安装和配置Zend Server 6教程(1)

    作为web开发人员,应该熟悉掌握各种系统下安装和配置web服务器与站点的技术. 随着越来越多的开发人员选择Zend Server服务器,慧都推出了在Mac OSX系统安装和配置Zend Server ...

  3. SQL Server中生成测试数据

    原文:SQL Server中生成测试数据 简介      在实际的开发过程中.很多情况下我们都需要在数据库中插入大量测试数据来对程序的功能进行测试.而生成的测试数据往往需要符合特定规则.虽然可以自己写 ...

  4. 方向梯度直方图(HOG)和颜色直方图的一些比較

    近期在学习视频检索领域的镜头切割方面的知识,发现经常使用的方法是直方图的方法,所以才专门有时间来学习下.查看到这两种直方图的时候,感觉有点接近,好像又不同,放在这做个比較.大部分还是百科的内容,只是对 ...

  5. 安装Oracle 9i - 初学者系列 - 学习者系列文章

    Oracle 9i数据库是经典的Oracle版本,就象SQL Server 2000一样.笔者最初使用到的Oracle版本就是Oracle 9i.下面就介绍下Oracle 9i的安装. 1.  下载O ...

  6. 深入理解javascript new的机制

    我们在使用对象的时候,除了一些浏览器内置的单体对象可以直接使用外,都会new一个出来使用. 1.最简单的莫过于如下获取一个Object对象实例 var obj = new Object(); 说明:此 ...

  7. 简单的php和apache的安装

    今天刚刚接触到PHP  要想深入学习一门语言  首先我们先从安装开始   对于php和apache这两个程序是比较难以安装的  好了  下面我们开始正式安装: 首先我们得准备好  apache  以及 ...

  8. NodeJs技术

    我的NodeJs技术总结——第一篇   既然是我的技术总结,那就是以我的技术水平为基础的,写浅了大家不要笑话,如果有错误的地方还望指正. 这第一篇就谈谈NodeJs的一些编程细节吧. 1.遍历数组 f ...

  9. jQuery在html有效,在jsp无效的原因

    最近用jQuery来写下拉框的选项值的左右移动,代码如下: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN& ...

  10. IOS UI 第三篇:基本UI

    工厂模式:   .h文件:   #import <Foundation/Foundation.h>typedef enum{    QFRed,    QFYellow,    QFBlu ...