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

概述

委托是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. Spring之SpringMVC的Controller(源码)分析

    说明: 例子就不举了,还是直接进入主题,本文主要是以SpringMVC的Controller接口为入点,来分析SpringMVC中C的具体实现和处理过程. 1.Controller接口 public ...

  2. MVC 分页1 标准的url分页

    一. 将mvcpager ddl 引用到web服务项目中. 二. 在view加入 <%@ Import Namespace="Webdiyer.WebControls.Mvc" ...

  3. [译]Java 设计模式之组合

    (文章翻译自Java Design Pattern: Composite) 组合模式相对来说是比较简单的,但是它在很多设计中被用到,比如SWT.Eclipse工作空间等等.它创建了一个可以通过唯一的方 ...

  4. 页面loading提示效果

    前言: 现在做页面一般为了提示友好点,一般会做个页面正在加载的loading提示效果,当页面加载完毕后再显示内容!这个时候就需要监控页面的资源加载的情况,有时候这并不好做,因为页面涉及图片,视频,已经 ...

  5. java这些东西发展(4)-------无穷time of error

    今天,有些郁闷的心情啊.空指针下午折磨.到现在为止仍然没有得到解决,专家的招募结果没拿到,我们必须继续自己的,进而改变一点点一点点地找到它,但现在我不想搞,准备回家,这浪费了一个多小时,之前记录的下一 ...

  6. 将Model实体类对象作为WebService接口参数(转)

    转自:http://www.cnblogs.com/fengyishou/archive/2009/02/27/1399281.html 关于web服务的有关基础知识,看了基本书,但是不敢在这里乱说, ...

  7. nginx启动,重启,关闭命令

    nginx启动,重启,关闭命令 停止操作停止操作是通过向nginx进程发送信号(什么是信号请参阅linux文 章)来进行的步骤1:查询nginx主进程号ps -ef | grep nginx在进程列表 ...

  8. 一般处理程序装配数据到html页的原理

    相应html页面并保存状态输出原理:(有状态请求)请求页面提交给后台,获取值进行处理之后再根据name标记读取原html文件文字将值替换再一并返回给页面:(在response时替换)比如原模板< ...

  9. POI操作EXCEL之导出Excel(设置有效性,下拉列表引用)

    本人使用的是poi-bin-3.10-FINAL-20140208.zip 版本的poi以下是程序关键代码: //需要引用的类 import java.io.File; import java.io. ...

  10. 常用排序算法的python实现和性能分析

    常用排序算法的python实现和性能分析 一年一度的换工作高峰又到了,HR大概每天都塞几份简历过来,基本上一天安排两个面试的话,当天就只能加班干活了.趁着面试别人的机会,自己也把一些基础算法和一些面试 ...