日期:2014-05-16 浏览次数:20742 次
在我们的程序世界中,委托也如电影这般简单么?当然,什么是OO,OO就是现实世界的抽象,所有现实世界的事物,在OO里都能得到很好的诠释,在我们的现实世界中,委托相当于一个命令,做事情的是别人,而在程序的世界里委托知识存储了各个方法的地址,而她自己什么都不做,接下来,我们举一个简单的例子,时至母亲节,姐姐委托妹妹去买康乃馨送给妈妈,怎么在程序的世界中体现呢?
//妹妹类
public class Meimie
{
//其实买康乃馨,辛苦的是妹妹
public static void BuyCarnation()
{
Console.WriteLine("老姐啊,一起买,才有心意!");
}
}
//姐姐类
class Jiejie
{
//声明一个委托,其实就是个“命令”
public delegate void BugCarnation();
public static void Main(string[] args)
{
//这里就是具体阐述这个命令是干什么的,本例是meimei.BuyCarnation“妹妹买康乃馨”
BugCarnationEventHandler myDelegate = new BugCarnationEventHandler(meimei.BuyCarnation);
//这时候委托被附上了具体的方法
myDelegate();
Console.ReadKey();
}
}
其中,
BugCarnationEventHandler myDelegate = new BugCarnationEventHandler(meimei.BuyCarnation);
是委托的声明方法,BugCarnationEventHandler(委托的方法),委托的方法必须要加上,因为委托的构造函数是不为空的,注意,委托的参数和返回类型,都要和我们要具体委托的方法一致,如
public delegate void BugCarnationEventHandler();
public static void BuyCarnation()
{
Console.WriteLine("老姐啊,一起买,才有心意!");
}
说到委托,不得不提一下我们的事件,那么什么是事件呢?EVENT?Click Event,Load Event,一连串的概念冲击着我小小的脑袋,那么到底是什么事件呢?事件是类在发生其关注的事情时用来提供通知的一种方式,事件的发生一般都牵扯到两个角色,一个是事件发行者(Publisher),也称作是发送者(Sender),其实就是一个对象,这个对象会自行维护本身的状态信息,当本身状态信息变动时,便触发一个事件,并通知所有的事件订阅者;另一个是事件订阅者(Subscriber),对事件感兴趣的对象,也称为Receiver,可以注册感兴趣的事件,在事件发行者触发一个事件后,会自动执行这段代码,我们来举一个简单的例子,看看我们的“事件”是如何在我们的编程世界中完美体现的:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace ConsoleApplication2
{
//发布者(Publiser)
public class Publisher
{
//声明一个花店的委托
public delegate void PublishEventHander();
//在委托的机制下我们建立一个花店事件
public event PublishEventHander OnPublish;
//事件必须要在方法里去触发,花店出售康乃馨方法
public void issue()
{
//如果有人预定了这个事件,也就是这个事件不是空
if (OnPublish != null)
{
Console.WriteLine("表达爱意的康乃馨今天出售哦!");
OnPublish();
}
}
}
//Subscriber 预定者,妹妹
public class Jiejie
{
//对事件感兴趣的事情,这里指对花店康乃馨感兴趣
public static void Receive()
{
Console.WriteLine("噢耶,我已经收到表达爱意的康乃馨!!");
}
}
//Subscriber 预定者,妹妹
pu