`
zjnbshifox
  • 浏览: 316889 次
  • 性别: Icon_minigender_1
  • 来自: 宁波
社区版块
存档分类
最新评论

.Net中的Delegate和Event

    博客分类:
  • .NET
阅读更多
以前在学.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
}
}
}

感觉老外的代码结构真的很清晰,虽然还是有点迷糊啦,不过比原来清楚多了,多看看的话,以后应该会慢慢明白的,呵呵
分享到:
评论

相关推荐

    .net delegate and event

    ### .NET中的委托与事件详解 #### 一、委托的简介与使用 ##### 1.... ...通过这种方式,.NET中的委托和事件为开发者提供了一种灵活的方式来设计和组织代码,使得不同组件之间能够有效地通信和协作。

    .net c# 动态 添加event

    根据提供的文件信息,可以看出文档与 .NET 和 C# 动态添加事件(Event)有关,但实际内容似乎并不涉及具体的编程细节,而是包含了大量看似不相关的符号和文本。因此,这里将基于标题和描述来详细阐述如何在 .NET 的 ...

    NET Delegate Event Model vs COM Connection PointsNET事件模型

    在.NET Framework中,事件模型基于委托(Delegate)和事件(Event)。委托是类型安全的函数指针,它允许我们将方法作为参数传递给其他方法。事件是对象公开的一种通知机制,当特定条件满足或状态改变时,对象会触发...

    C#中的事件和委托(Delegate,Event)

    事件是.NET框架中的一种特殊类型的委托,它提供了发布者(Publisher)和订阅者(Subscriber)之间的隔离。发布者是触发事件的对象,而订阅者是响应事件的对象。事件通常用于控制用户界面的交互,例如按钮点击事件。 ...

    Delegate.Event.ThreadDelegate.Event.Thread

    综上所述,理解并熟练运用`Delegate.Event.ThreadDelegate.Event.Thread`中的概念对于编写高效、安全的多线程.NET应用程序至关重要。这涉及到如何定义和使用委托来传递方法,如何设置事件来处理不同线程间的通信,...

    delegate和event入门实例

    在.NET框架中,`Delegate`和`Event`是两种关键的多线程编程概念,用于实现事件驱动编程。本文将详细介绍这两个概念,并通过一个在VS2012控制台应用程序中的实例来帮助理解它们的使用。 `Delegate`是.NET中的一个类...

    Delegate&Event

    在C#编程语言中,委托和事件是两个非常重要的概念,它们构成了.NET框架中的多线程和异步处理的核心机制。下面将详细讲解这两个概念及其应用。 **委托(Delegate)** 1. **定义与理解**:委托在C#中可以看作是指向...

    DelegateEvent04.zip

    通过分析"DelegateEvent04.zip"中的代码示例,我们可以看到如何在实际项目中应用这些概念,例如事件的声明、事件的触发、事件的订阅和取消订阅等。这有助于加深对委托和事件的理解,提高编程能力。 总之,C#中的...

    ASP.NET委托和事件

    在ASP.NET中,委托和事件是两个关键概念,它们是实现组件间通信和响应用户交互的重要机制。 **委托(Delegate)** 委托在.NET Framework中扮演着函数指针的角色,允许我们传递方法作为参数或者存储方法以便稍后调用...

    C#由浅至深深度解析Delegate委托与Event事件

    在.NET Framework中,委托(Delegate)和事件(Event)是非常重要的概念。对于初学者而言,这些概念可能较为抽象和难以理解。本文旨在通过一系列逐步深入的例子来帮助读者更好地掌握委托与事件的基本原理及其在.NET ...

    C.NET中的委托和事件.pdf

    ### C#.NET中的委托和事件 #### 委托 在C#.NET中,委托是一种引用类型的数据结构,它封装了方法的引用。通过委托,我们可以将方法作为参数进行传递,或者将方法作为对象属性存储起来。这为C#.NET中的事件处理、回...

    C# 委托 和 事件在 .net Framework中的应用

    在.NET Framework中,C#的委托和事件是两种强大的特性,它们在构建可复用、模块化和响应式代码方面发挥着关键作用。首先,让我们深入理解委托。 委托在C#中可以被视为一种类型,它封装了对方法的引用。简单来说,...

    vb转换c# .net工具

    7. **委托和事件**:处理VB.NET的Delegate和Event关键字,转换为C#的等效概念。 8. **字符串和日期操作**:将VB.NET特有的字符串和日期处理函数转换为C#的相应方法。 9. **XML和LINQ**:如果VB.NET代码中使用了XML...

    VB\VB.NET程序设计

    在VB.NET中,面向对象的程序设计还包括其他一些重要概念,如接口(Interface)、事件(Event)和委托(Delegate)。接口定义了一组方法签名,类可以实现接口以确保提供特定的成员。事件是对象可以响应的动作,通常与...

    c#.net常用函数和方法集

    以上仅是C#.NET中的一部分常用函数和方法,实际开发中还有许多其他特性和工具,如设计模式、并发控制、AOP(面向切面编程)、WPF和ASP.NET框架等,都需要深入学习和理解。通过不断地实践和学习,开发者可以熟练掌握...

    .net C#中的委托和事件

    .NET Framework中的委托和事件是C#编程中两个关键的概念,它们在实现事件驱动编程和回调机制方面发挥着重要作用。委托可以被理解为一种类型安全的函数指针,允许我们将方法作为参数传递给其他方法,或者存储在一个...

    VB.NET中子窗刷新父窗显示

    在提供的文件名列表中,我们看到了`.resx`和`.designer.vb`文件,这些都是VB.NET项目中的资源文件和设计时代码生成文件。`.resx`文件存储用户界面的资源,如字符串、图标等,而`.designer.vb`文件是自动生成的,包含...

    Delegate Event Study

    在.NET框架中,它们扮演着至关重要的角色,特别是在设计模式和组件交互方面。让我们深入探讨这两个概念,以及如何在实际开发中有效利用它们。 首先,我们来理解什么是委托。委托在C#中可以看作是类型安全的函数指针...

    VB.NET Step By Step系列课程(4):VB.NET中的面向对象设计

    在VB.NET中,类是对象的蓝图,定义了对象的属性(数据成员)和行为(方法)。对象则是类的实例,拥有类所定义的特征和功能。通过`Class`关键字,我们可以定义一个类,并使用`New`关键字创建对象。 2. 封装 封装是...

    北大青鸟深入.net平台和C#编程(下)

    6. 高级特性:如委托(delegate)、事件(event)、Lambda表达式、匿名方法、LINQ(Language Integrated Query)等,这些都是C#的高级特性,能够提高代码的简洁性和可读性。 7. 并发与异步编程:在多核处理器和...

Global site tag (gtag.js) - Google Analytics