C# 关于委托的小例子
本例子是一个关于委托的小例子[猫叫,狗跳,人喊]。仅供学习分享使用,如有不足之处,还请指正。
概述
委托是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# 关于委托的小例子的更多相关文章
- C#利用事件与委托进行窗体间传值简单小例子
本篇博客是利用C#委托与事件进行窗体间传值的简单小例子 委托与事件的详细解释大家可以参照张子阳的博客: http://www.tracefact.net/CSharp-Programming/Dele ...
- 前端的CRUD增删改查的小例子
前端的CRUD增删改查的小例子 1.效果演示 2.相关代码: <!DOCTYPE html> <html lang="en"> <head> & ...
- 通俗易懂,C#如何安全、高效地玩转任何种类的内存之Span的脾气秉性(二)。 异步委托 微信小程序支付证书及SSL证书使用 SqlServer无备份下误删数据恢复 把list集合的内容写入到Xml中,通过XmlDocument方式写入Xml文件中 通过XDocument方式把List写入Xml文件
通俗易懂,C#如何安全.高效地玩转任何种类的内存之Span的脾气秉性(二). 前言 读完上篇<通俗易懂,C#如何安全.高效地玩转任何种类的内存之Span的本质(一).>,相信大家对sp ...
- springmvc入门的第一个小例子
今天我们探讨一下springmvc,由于是初学,所以简单的了解一下 springmvc的流程,后续会持续更新... 由一个小例子来简单的了解一下 springmvc springmvc是spring框 ...
- java即时通信小例子
学习java一段时间了,今天写来一个即时通信的小例子练手在其过程中也学到了一些知识拿出来和大家分享,请路过的各位大神多多赐教... 好了下面讲一下基本的思路: 首先,编写服务器端的程序,简单点说吧就是 ...
- Runtime的几个小例子(含Demo)
一.什么是runtime(也就是所谓的“运行时”,因为是在运行时实现的.) 1.runtime是一套底层的c语言API(包括很多强大实用的c语言类型,c语言函数); [runti ...
- bootstrap 模态 modal 小例子
bootstrap 模态 modal 小例子 <html> <head> <meta charset="utf-8" /> <title ...
- INI配置文件分析小例子
随手写个解析INI配置字符串的小例子 带测试 #include <iostream> #include <map> #include <string> #inclu ...
- JavaScript小例子:复选框全选
JavaScript小例子:复选框全选 这只是一个小例子,很简单,但是这个功能还是很常用的: 实现后效果如图: JavaScript代码: <script type="text/jav ...
随机推荐
- Linux Telnet安装配置
本文以红帽6.2 64位版本为例,其它linux类似: linux默认是使用SSH服务的 而不安装telnet服务 ,所以需要手动安装telnet. 1.telnet的安装包有两个,分别是: teln ...
- Spring IOC之容器扩展点
一般来说,一个应用开发者不需要继承ApplicationContext实现类.取而代之的是,Spring IoC容器可以通过插入特殊的整合接口的实现来进行扩展.下面的几点将要讲述这些整合的接口. 1. ...
- TODOList项目
[ 爱上Swift]十二期:TODOList项目 好久没有写Swift甚是想念,Swift,Xcode都比较稳定了写个程序熟悉一下,当然时间原因都是小Demo,废话不多说先上图. 下面是跑起来之后 ...
- 安装SQL Server 2005 - 初学者系列 - 学习者系列文章
初学者阶段,建议从数据库为基础入手进行学习. 下面介绍微软的SQL Server 2005数据库的安装. 首先,从下列地址获取SQL Server 2005的安装程序. ed2k://|file|cs ...
- HDU2093--考试排名
考试排名 Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Submissi ...
- mysql支持的数据类型及其测试
原文:mysql支持的数据类型及其测试 1.基础知识 1.1如何来查看mysql的帮助手册 ?int Help float; 1.2创建表的规则 CREATE TABLE [IF NOT EXISTS ...
- mysql 安装后无法登陆mysql的 shell 那mysql>经验:ERROR 1045 (28000): Access denied for user 'root'@'localhost‘
[root@hzswtb2-mpc ~]# mysql ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using pas ...
- Random随机数
Random类的常用方法 方法 备注 Int nextInt() 返回一个int类型的随机数 Int nextInt(n) 返回一个0到n之间的数,不包括n Double nextDouble() 返 ...
- Apple Swift中英文开发资源
Apple Swift中英文开发资源集锦[apple swift resources] 找到的一些Apple Swift中英文资源原文链接,希望对大家有所帮助.欢迎大家补充,原始资源链接最好! The ...
- 【值得收藏】绘图工具Origin的学习资料汇编【可免费下载】
Origin使用教程 Origin为OriginLab公司出品的较流行的专业函数绘图软件,是公认的简单易学.操作灵活.功能强大的软件,既可以满足一般用户的制图需要,也可以满足高级用户数据分析.函数拟合 ...