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

概述

委托是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. C#如何获得系统时间

    原文:C#如何获得系统时间 C#获取时间,日期 //C#里内置的DateTime基本上都可以实现这些功能,巧用DateTime会使你处理这些事来变轻松多了       //今天             ...

  2. UC编程:输入输出重定向(系统调用)

    在Unix下,系统重定向是使用dup和dup2函数完成的 在学习使用这两个函数之前,必须要搞懂一个概念就是文件描述符 摘自:<文件描述符和文件指针的区别> 文件描述符就是open文件时产生 ...

  3. [译]Java中的继承 VS 组合

    (文章翻译自Inheritance vs. Composition in Java) 这篇文章阐述了Java中继承和组合的概念.它首先给出了一个继承的例子然后指出怎么通过组合来提高继承的设计.最后总结 ...

  4. CF:Problem 427C - Checkposts良好的沟通 Tarjan算法

    tarjan算法的第一个问题 喷我的脸....手写叠式开成BOOL,我一直在找错了... #include<cstdio> #include<cstring> #include ...

  5. ASP.NET请求处理过程

    当请求一个*.aspx文件的时候,这个请求会被inetinfo.exe进程截获,它判断文件的后缀(aspx)之后,将这个请求转交给Aspnet_isapi.dll,aspnet_isapi.dll会通 ...

  6. Tomcat源码学习一

    这段时间工作不太忙,所以抽时间学习了TOMCAT, TOMCAT实际就是负责保持TCP连接传递到部署的项目中.浏览器实质就是TCP发送器.将用户的请求封装成TCP发送请求.当然格式是双方协定的.使用的 ...

  7. SpringMVCURL请求到Action的映射规则

    SpringMVC学习系列(3) 之 URL请求到Action的映射规则 在系列(2)中我们展示了一个简单的get请求,并返回了一个简单的helloworld页面.本篇我们来学习如何来配置一个acti ...

  8. SZU:B47 Big Integer II

    Judge Info Memory Limit: 32768KB Case Time Limit: 10000MS Time Limit: 10000MS Judger: Normal Descrip ...

  9. const与readonly的区别

    const与readonly 很像,都是将变量声明为只读,且在变量初始化后就不可改写.那么,const与readonly 这两个修饰符到底区别在什么地方呢?其实,这个牵扯出C#语言中两种不同的常量类型 ...

  10. 玩转python之每次处理一个字符

    在Python中字符就是长度为1的字符串,所以可以循环遍历一个字符串,依次访问每一个字符,得到你想要的处理前提: 一个列表是个好主意,就像这样:thelist = list(thestring) 当然 ...