C#委托与事件讲解(一)
首先,我们还是先说说委托吧,从字面上理解,只要是中国人应该都知道这个意思,除非委托2个中文字不认识,举个例子,小明委托小张去买车票。
但是在我们的程序世界里,也是这么的简单吗?当然,什么是OO,OO就是现实世界的抽象,所有现实世界的事物,在OO里都能得到很好的诠释,不好意思,扯远了......
那我们就单刀直入吧,如果同学们不嫌烦的话,可以看一下,网上中文,英文的那个GreetingPeople例子。
首先是C#语法
public delegate void BugTicketEventHandler();
delegate 是关键词,【注:EventHandler是一个声明委托的微软C#的命名标准,我的习惯是标准就要第一时间说,也就这个命名习惯要第一时间养成】
完了,这就是委托,就这么简单,看看和我们一般的方法有什么区别呢?
public void BuyTicket()
{
方法体
}
区别知道了吧,在现实生活中,委托只是个命令,做事情是别人,而在程序世界里委托只是存储了各个方法的地址,而他自己也是什么也不做的。
那我们就把刚才那个,小明委托小张去买车票的现实生活场景,怎么在程序世界里体现呢?
//小张类
public class MrZhang
{
//其实买车票的悲情人物是小张
public static void BuyTicket()
{
Console.WriteLine("NND,每次都让我去买票,鸡人呀!");
}
} //小明类
class MrMing
{
//声明一个委托,其实就是个“命令”
public delegate void BugTicketEventHandler(); public static void Main(string[] args)
{
//这里就是具体阐述这个命令是干什么的,本例是MrZhang.BuyTicket“小张买车票”
BugTicketEventHandler myDelegate = new BugTicketEventHandler(MrZhang.BuyTicket); //这时候委托被附上了具体的方法
myDelegate();
Console.ReadKey();
}
}
BugTicketEventHandler myDelegate = new BugTicketEventHandler(MrZhang.BuyTicket);
这是委托的声明方法, BugTicketEventHandler(委托的方法);委托的方法必须要加上,因为委托的构造函数是不为空的。
注:委托的参数和返回类型,都要和你要具体委托的方法要一致,例:
public delegate void BugTicketEventHandler();
public static void BuyTicket()
{
Console.WriteLine("NND,每次都让我去买票,鸡人呀!");
}
同学们,看到这里可以先消化消化,休息一下,我们简单的讲一下委托链的概念:
其实委托链也是相当的简单,在现实生活中,小明叫小张买完车票之后,可能接着又让他带张电影票,
而我们程序世界里的表述为:
//小张类
public class MrZhang
{
//其实买车票的悲情人物是小张
public static void BuyTicket()
{
Console.WriteLine("NND,每次都让我去买票,鸡人呀!");
} public static void BuyMovieTicket()
{
Console.WriteLine("我去,自己泡妞,还要让我带电影票!");
}
} //小明类
class MrMing
{
//声明一个委托,其实就是个“命令”
public delegate void BugTicketEventHandler(); public static void Main(string[] args)
{
//这里就是具体阐述这个命令是干什么的,本例是MrZhang.BuyTicket“小张买车票”
BugTicketEventHandler myDelegate = new BugTicketEventHandler(MrZhang.BuyTicket); myDelegate += MrZhang.BuyMovieTicket;
//这时候委托被附上了具体的方法
myDelegate();
Console.ReadKey();
}
}
其实,我们只是在程序中加了 myDelegate += MrZhang.BuyMovieTicket;
这时这个委托就相当于要做2件事情,先是买车票,再是买电影票拉!
好了,关于大白话的委托就介绍到这里了,是不是并没有大家想的这么可怕呢,在下一回我们就接着大白话的EVENT的讲解。
C#委托与事件讲解(一)的更多相关文章
- [转]大白话系列之C#委托与事件讲解(三)
本文转自:http://www.cnblogs.com/wudiwushen/archive/2010/04/21/1717378.html [我希望大家在看完文章的时候,多做做练习,自己也可以想个场 ...
- 大白话系列之C#委托与事件讲解大结局
声明:本系列非原创,因为太精彩才转载,如有侵权请通知删除,原文:http://www.cnblogs.com/wudiwushen/archive/2010/04/20/1698795.html 今天 ...
- 大白话系列之C#委托与事件讲解(一)
从序言中,大家应该对委托和事件的重要性有点了解了吧,虽然说我们现在还是能模糊,但是从我的大白话系列中,我会把这些概念说的通俗易懂的.首先,我们还是先说说委托吧,从字面上理解,只要是中国人应该都知道这个 ...
- 大白话系列之C#委托与事件讲解(序言)
声明:本系列非原创,因为太精彩才转载,如有侵权请通知删除,原文:http://www.cnblogs.com/wudiwushen/archive/2010/04/20/1698795.html 在讲 ...
- C#委托和事件讲解
委托 和 事件在 .Net Framework中的应用非常广泛,然而,较好地理解委托和事件对很多接触C#时间不长的人来说并不容易.它们就像是一道槛儿,过了这个槛的人,觉得真是太容易了,而没有过去的人每 ...
- 大白话系列之C#委托与事件讲解(三)
今天我接着上面的3篇文章来讲一下,为什么我们在日常的编程活动中遇到这么多sender,EventArgs e 参数:protected void Page_Load(object sender, Ev ...
- 大白话系列之C#委托与事件讲解(二)
什么是事件?EVENT?点击事件?加载事件?一连串的模糊的概念冲击着我们弱小的脑袋 那我们首先来看一下比较正统的感念吧: 事件是类在发生其关注的事情时用来提供通知的一种方式. 事件的发生一般都牵扯2个 ...
- C# 委托和事件 与 观察者模式(发布-订阅模式)讲解 by天命
使用面向对象的思想 用c#控制台代码模拟猫抓老鼠 我们先来分析一下猫抓老鼠的过程 1.猫叫了 2.所有老鼠听到叫声,知道是哪只猫来了 3.老鼠们逃跑,边逃边喊:"xx猫来了,快跑啊!我是老鼠 ...
- C# 关于委托和事件的妙文:通过一个例子详细介绍委托和事件的作用;Observer模式简介
委托和事件在 .Net Framework中的应用非常广泛,然而,较好地理解委托和事件对很多接触C#时间不长的人来说并不容易.它们就像是一道槛儿,过了这个槛的人,觉得真是太容易了,而没有过去的人每次见 ...
随机推荐
- spring请求到达controller但响应404
问题是这样的,前台发送请求的后台,后台的方法正常执行,将数据放在response.getWrite里,但在前台并没有展示数据.用浏览器的开发者工具看下请求,发现响应404. 最后网上查了查,sprin ...
- Java8:使用Lambda表达式增强版Comparator排序
学习路上的自我记录-------路好长,就问你慌不慌,大声港,不慌.----jstarseven. 实体类: package com.server.model; /** * Created by js ...
- 关于ABP——领域服务的思考
我在刚接触ABP的时候一直有一个疑问--有了应用服务,为什么还需要领域服务呢? 领域服务和应用服务对比 领域服务 应用服务 返回值 Entity DTO 被表现层调用 不可以(非强制) 可以 在ABP ...
- 【CSS学习笔记】整齐的表格
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xht ...
- window7环境下VMWare自定义安装Linux虚拟机完全教程
1.首先准备好以下工具和安装包,最好到官网下载: VMWare 8.x,注意版本不易过高,因为很多时候会出现和Linux镜像不兼容的情况,下载地址:http://www.vmware.com/cn.h ...
- 创建ListView控件
// 创建List控件 HWND hListView = CreateWindow(WC_LISTVIEW ,/*listview 宏的名字*/ L"" ,/*窗口标题*/ WS_ ...
- 石头剪刀布 OpenJudge 1.6.08
石头剪刀布是常见的猜拳游戏.石头胜剪刀,剪刀胜布,布胜石头.如果两个人出拳一样,则不分胜负. 一天,小A和小B正好在玩石头剪刀布.已知他们的出拳都是有周期性规律的,比如:"石头-布-石头-剪 ...
- android ViewStub延时渲染的应用
android开发当中,我们经常会遇到根据某个条件去控制一个控件的显示/隐藏的情况.虽然setVisibility(int visibility)的确可以达到这样的目的,但是在渲染时,其实隐藏的布局也 ...
- C# 利用ajax实现局部刷新
C#所有runat="server"的控件都会造成整个界面的刷新,如果想实现局部刷新,可以利用ajax. 需要加入的控件有ScriptManager和UpdatePanel,可以实 ...
- Storm 1.0.0
Storm 1.0.0版本增加了很多新的特性,可用性以及性能也得到了很大的改善,该版本是Storm发展历程上一个里程碑式的版本,主要特点如下. 性能提升 Storm 1.0.0版本最大的亮点就是性能提 ...