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

概述

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

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

涉及知识点

委托的定义

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

效果图

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

核心代码

代码如下:

 using System;
using System.Collections.Generic;
using System.Linq;
using System.Text; namespace DemoDelegate
{
public delegate void Handler();//定义一个委托类型
/// <summary>
/// 猫猫
/// </summary>
public class Cat
{ public Handler Miao; /// <summary>
/// Miao叫的动作
/// </summary>
public void MaioMiao()
{
var action = Miao;
if (action != null)
{
action();
}
}
}
}
///////////////////////////////////////////////////
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text; namespace DemoDelegate
{
/// <summary>
/// 可爱的狗狗
/// </summary>
public class Dog
{
public Handler Tiao; /// <summary>
/// 狗跳的动作
/// </summary>
public void DogTiao()
{
var action = Tiao;
if (action != null)
{
action();
}
}
}
} /////////////////////////////////////////////// using System;
using System.Collections.Generic;
using System.Linq;
using System.Text; namespace DemoDelegate
{
/// <summary>
/// 主人
/// </summary>
public class Master
{
public Handler Han; public void HanJiao()
{
var action = Han;
if (action != null)
{
action();
}
} }
}

界面类代码如下:

 using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms; namespace DemoDelegate
{
public partial class MainForm : Form
{
private Dog dog; private Master master; public MainForm()
{
InitializeComponent();
InitInfo();
} /// <summary>
/// 初始化信息
/// </summary>
private void InitInfo() {
dog = new Dog();
dog.Tiao += TiaoMethod;
master = new Master();
master.Han += HanMethod;
} /// <summary>
/// 喵喵
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void btnCatMiao_Click(object sender, EventArgs e)
{
CatForm catForm = new CatForm();
catForm.MiaoAction += MaioMethod;
catForm.ShowDialog();
} private void MaioMethod(object sender,EventArgs e) {
this.txtCat.Text = "猫在父页面叫了";
this.dog.DogTiao();
this.master.HanJiao();
} private void TiaoMethod()
{
this.txtDog.Text = "狗跳了";
} private void HanMethod()
{
this.txtMaster.Text = "别叫了";
}
}
}
/////////////////////////////////////////////////////////////////
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms; namespace DemoDelegate
{
public partial class CatForm : Form
{
private Cat cat; public event EventHandler MiaoAction; public CatForm()
{
InitializeComponent();
InitInfo();
} public void InitInfo() {
cat = new Cat();
cat.Miao += MaioMethod;
} private void MaioMethod()
{
this.txtCat.Text = "猫叫了";
var action = MiaoAction;
if (action != null) {
action(cat, null);
}
} private void btnCatMiao_Click(object sender, EventArgs e)
{
this.cat.MaioMiao();
}
}
}

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

源码下载

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. 通过SqlClr制作Sql自动化批量执行脚本

    原文:通过SqlClr制作Sql自动化批量执行脚本 通过SqlClr制作Sql自动化批量执行脚本 在与同事一起做项目时,看到同事用sqlclr做批量执行脚本,感觉挺新奇的就上网搜集资料自己模仿跟做了个 ...

  2. 【转】android 欢迎界面翻页成效,仿微信第一次登陆介绍翻页界面

    android 欢迎界面翻页效果,仿微信第一次登陆介绍翻页界面 本实例做的相对比较简单主要是对翻页控件的使用,有时候想要做一些功能是主要是先了解下是否有现成的控件可以使用,做起来比较简单不用费太大的劲 ...

  3. 修改servu数据库密码 servu加密方式

    项目要求可以有用户自行修改servu密码.servu可以通过odbc访问access\mysql\sqlserver数据库.我们直接通过创建web来修改就可以了. 不过问题来了,密码是加密的...通过 ...

  4. PHP中的表单提交和获取

    在php中表单提交的方式有两种: 1.post提交,这种安全性较高. 2.get提交,他提交的是一个url地址,因此在从地址上面就可以看到许多信息,因此不安全. 每个表单<form>后面都 ...

  5. 分布式文件系统之MogileFS工作原理及实现过程

    MogileFS是一套高效的文件自动备份组件,由Six Apart开发,广泛应用在包括LiveJournal等web2.0站点上.MogileFS由3个部分组成:   第1个部分:是server端,包 ...

  6. OpenGL Development Cookbook chapter7部分翻译

    让我们通过以下简单步骤开始我们的配方: 1.通过读取外部的体数据文件,并通过该加载数据集数据转换成一个OpenGL纹理.也使硬件的mipmap生成.通常情况下,从使用一个横截面中获得的体积数据文件存储 ...

  7. 一个Shift的后门程序,可以让你可以进入你不知道密码的电脑

    1.前提 你可以在平时亲身接触状态电脑,哪怕是在电脑主人不在的时候(虽然主人不在,或者关机了,进入电脑是要密码的). 2.原理 利用电脑连续按5次Shift会触发粘滞键,它会运行c:\winows\s ...

  8. FineUI Grid 缓存列显示隐藏状态

    当列表字段过多时,需要隐藏掉一些,但是再次打开页面又显示出来了,FineUI没有提供缓存功能,那么自己动手,打开[ext-part2.js]找到 “if (Ext.grid.column.RowNum ...

  9. [转]iOS Anti-Debugging Protections

    source-1: http://www.coredump.gr/articles/ios-anti-debugging-protections-part-1/ source-2: http://ww ...

  10. ios7学习之路六(隐藏状态栏 )

    方法一(代码设置): 现在ios7已经更改为透明,并且不占用屏幕高度.其中隐藏及显示的方法如下: 在uiviewcontroller的子类下,调用:      if ([self respondsTo ...