.Net中的Delegate和Event

以前在学.net的时候,总是搞不明白delegate和event的区别,也不知道这个是做什么的,今天在www.codeproject.com上看了一篇文章觉得有点明白了,赶紧做一个笔记,原文地址:
http://www.codeproject.com/csharp/delegate_bedtime.asp

A Delegate is a class. When you create an instance of it, you pass in the function name (as a parameter for the delegate's constructor) to which this delegate will refer.
delegate首先是一个class,当你建立一个delegate的实例的时候,你需要传入一个函数名作为这个delegate的构造函数的参数。这里需要注意的是,这个函数在声明的时候,声明是和delegate的声明是一样的,例如:
Delegate int SomeDelegate(string s, bool b);
private int SomeFunction(string str, bool bln){...}
SomeDelegate sd = new SomeDelegate(SomeFunction);
调用
sd("somestring", true);
这个就跟函数的指针类似。

Events are variables of type delegates.
I mean, if you want to declare an event,
you just declare a variable of type some delegate and
put event keyword before your declaration, like this:
Events是delegate类型的变量,如果需要声明一个event,
就可以声明特定类型的delegate并且把event这个关键字放在声明前,例如:
public delegate void NumberReachedEventHandler(object sender,
NumberReachedEventArgs e);
public event NumberReachedEventHandler NumberReached;


完整的例子:
public class Counter
{
public event NumberReachedEventHandler NumberReached;

public Counter()
{
//
// TODO: Add constructor logic here
//
}
//在计数到reachableNum的时候,触发事件
public void CountTo(int countTo, int reachableNum)
{
if(countTo < reachableNum)
throw new ArgumentException(
"reachableNum should be less than countTo");
for(int ctr=0;ctr<=countTo;ctr++)
{
if(ctr == reachableNum)
{
NumberReachedEventArgs e = new NumberReachedEventArgs(
reachableNum);
OnNumberReached(e);
//可以在这里直接调用NumberReached(this, e),不过这样
//做的话,扩展性差一点
return;//don't count any more
}
}
}
//通过这种方式,子类继承的时候可以很容易的扩展,覆盖掉这个方法,做自己定义的处理
protected virtual void OnNumberReached(NumberReachedEventArgs e)
{
if(NumberReached != null)
{
NumberReached(this, e);//Raise the event
}
}
}

感觉老外的代码结构真的很清晰,虽然还是有点迷糊啦,不过比原来清楚多了,多看看的话,以后应该会慢慢明白的,呵呵
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值