delegate有多播和非多播(叫单一也行,我是这么叫的)之分。
delegate对于新手来说真的很不好理解,我大概断断续续的理解了10多天才算明白了点,现在说说。
声明方式: 访问修饰符 delegate 返回类型 委托名(参数);
红色部分是必须写的,蓝色部分可写可不写。
委托是什么?答:是委托(这是废话)。
委托干什么的?答:往下慢慢看(这不是废话)。
我来打个比喻吧。
delegate是关键字,这没什么好说的了,OK,比如说现在有个老板,有N个员工,有一个工作(工作 = 委托名),这个工作是老板给一些钱(钱 = 参数),去买一些东西(买东西 = 具体的行为),完事以后报告一下结果,结果就是买没买到(结果 = 返回类型)。
delegate 结果工作(钱);
看这个式子,再和上面的声明方式对照一下。
OK,现在有三件工作,1:买车票。2:买石头。3:买木材。
这个三件工作有两个特性:1:都需要钱。2:都有结果(买没买到)。
这两个特性正好符合上面声明的委托了。所以这三件事都可以由上面这个委托来办。
OK。比喻完了,来点具体的代码。
(稍等,我去写代码。。。。。。
OK,我写完了,说明我都写在代码中了。
using System;
using System.Collections.Generic;
using System.Text;
namespace ConsoleApplication1
{
delegate bool DoWork(double money);
//声明委托,返回类型bool表示是否买到东西,参数是钱。
class BuySomething
{
//买车票
bool BuyTicket(double needMoney)
{
if (needMoney < 100)
{
Console.WriteLine("Fail");
return false;
}
else
{
Console.WriteLine("Succeed");
return true;
}
}
//买石头
bool BuyStone(double needMoney)
{
if (needMoney < 200)
{
Console.WriteLine("Fail");
return false;
}
else
{
Console.WriteLine("Succeed");
return true;
}
}
//买木材
bool BuyWood(double needMoney)
{
if (needMoney < 300)
{
Console.WriteLine("Fail");
return false;
}
else
{
Console.WriteLine("Succeed");
return true;
}
}
static void Main(string[] args)
{
BuySomething buy = new BuySomething();
DoWork dowork = new DoWork(buy.BuyTicket);
//实例化委托。
//参数只写方法名,不要后面的括号。
dowork(150);
//OK,给150银子,能买哦。
//买完车票,该买石头了
dowork = new DoWork(buy.BuyStone);
dowork(250);
//Succeed
//买完石头,该买木材了
dowork = new DoWork(buy.BuyWood);
dowork(250);
//Fail。钱不够。
Console.ReadLine();
}
//只要是符合:1:返回型为bool。2:参数只有一个且为double。这两个条件的Method都可以用这个委托来执行。
}
}
多播委托是什么呢?就是好像有点批处理的意思,不多说了,不是很难,给出个代码。
注意,多播委托的返回类型必须是void。
这是一个winform程序,form中有2个textbox,4个label,1个button。想要运行这个代码,先把这几个控件拽进去。
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
namespace MulticastDelegate
{
delegate void DelCount();
public partial class Form1 : Form
{
int a, b;
double result;
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
a = int.Parse(textBox1.Text.Trim());
b = int.Parse(textBox2.Text.Trim());
DelCount dc = new DelCount(Label1Method);
dc += new DelCount(Label2Method);
dc += new DelCount(Label3Method);
dc += new DelCount(Label4Method);
dc();
}
void Label1Method()
{
result = a + b;
label1.Text = a.ToString() + " + " + b.ToString() + " = " + result.ToString();
}
void Label2Method()
{
result = a - b;
label2.Text = a.ToString() + " - " + b.ToString() + " = " + result.ToString();
}
void Label3Method()
{
result = a * b;
label3.Text = a.ToString() + " * " + b.ToString() + " = " + result.ToString();
}
void Label4Method()
{
if (b == 0)
{
label4.Text = "";
}
else
{
result = a * 1.0 / b;
label4.Text = a.ToString() + " / " + b.ToString() + " = " + result.ToString();
}
}

}
}

对delegate的理解相关推荐

  1. iOS 中delegate的理解与使用(传值)

    之前做了半年的iOS,刚入了门,又被拉去转战java,现在iOS的那位大佬离职了,又被弄过来维护app,之前对于iOS中的delegate一直都是半知半解,所以刚好趁着这个机会把我所了解的记下来,以便 ...

  2. DoNet:浅淡对delegate的理解

    1 前言 C#的相关文档,MSDN上其实已经很详细了,关于delegate的使用可以参 考MSDN上的文档https://msdn.microsoft.com/zh-cn/library/900fyy ...

  3. iOS开发之protocol和delegate

     protocol--协议 协议是用来定义对象的属性,行为和用于回调的.     协议中有两个keyword@private和@optional,@private表示使用这个协议必需要写的方法,@op ...

  4. C# delegate 用法

    Delegate 1.个人对delegate的理解 delegate 委托,将函数当做变量来操作,调用委托实例时会调用它绑定的函数. 2.委托的定义 委托的声明原型是 delegate <函数返 ...

  5. .NET 事件模型教程(一)

    .NET 事件模型教程(一) .code { padding: 10px 10px 10px 10px; font-family: 宋体; background-color: #ececec } 目录 ...

  6. Kotlin学习笔记 第二章 类与对象 第十四 十五节 委托 委托属性

    参考链接 Kotlin官方文档 https://kotlinlang.org/docs/home.html 中文网站 https://www.kotlincn.net/docs/reference/p ...

  7. Groovy 学习手册(4)

    6. 领域特定语言 Groovy 有许多特性,使它非常适合写DSL(领域特定语言).这些特性包活: 具有委托机制的闭包: 点号(.)和语句末尾的分号(;)是可选的: 运算符的重载(例如,加号,减号等) ...

  8. iOS开发入门——基础篇一

    文章目录 1. iOS应用生命周期 1.1 应用程序的架构 1.2 iOS应用的5种状态: 1.2.1做一些操作对应的生命周期调用的顺序 1.2.2全面的生命周期执行流程图 1.3 Main函数入口 ...

  9. Unity的C#编程教程_61_委托和事件 Delegates and Events 详解及应用练习

    文章目录 C# Delegates C# Events Example Working with C# Delegates and Events Challenge: Teleport Events ...

最新文章

  1. 【HDOJ图论题集】【转】
  2. 组织可以最大限度提高数据中心性能的五个步骤
  3. 深度学习cnn人脸检测_用于对象检测的深度学习方法:解释了R-CNN
  4. 【收集】47种常见的浏览器兼容性问题
  5. 分布式系统事务一致性解决方案大对比,谁最好使?
  6. python微信推送消息_Python编程之微信推送模板消息功能示例
  7. p图软件pⅰc_惊爆软件:王者荣耀P图大神,助力少年国服梦
  8. 【音效处理】Vibrato 简介
  9. html链接sqlserver,js连接sqlserver进行查询
  10. WordPress数据库error establishing a database connection错误
  11. Silverlight IReader阅读器第二版
  12. 按键精灵 excel mysql_按键精灵常用插件介绍
  13. 如何设置无线路由器提高迅雷下载速度
  14. PyTorch_Geometric 安装过程
  15. 简单通用QQ/微信跳转浏览器打开代码
  16. 使用express-jwt第三方包报错TypeError: expressJWT is not a function
  17. Java微服务框架一览
  18. 腾讯一面:内存满了,会发生什么?
  19. STM32CubeIDE导入机智云生成基于MDK的STM32工程
  20. 【小程序源码】星座运势,周公解梦下载

热门文章

  1. [Spring] 注入Bean属性
  2. 图形学实验 警察抓小偷
  3. 惠普136w墨粉量低_惠普136w加粉清零
  4. Study-Python23-023递归:这帮小兔崽子
  5. linux的wq 与wq的区别,Linux ESC :wq 和:wq!的区别
  6. 用canvas画阴阳鱼
  7. error: #error “Please include Eigen/Geometry instead of including headers inside the src directory d
  8. 上墙抽奖php代码,微信帐号开发:独立PHP微信上墙|微信墙|微信抽奖完美版(PHP源码)...
  9. 药品注册专员前景如何?5条职业规划发展方向
  10. 【整理】写给java web一年左右工作经验的人