event
上一篇(http://canbeatle.iteye.com/blog/686201)我们通过IL查看了委托的实现方式。现在开始探讨event(事件)。
.NET Framework 可以广泛地将委托用于事件处理任务,如 Windows 或 Web 应用程序中的按钮 Click 事件。Java 中的事件处理通常通过实现自定义侦听器类完成,而 C# 开发人员则可以利用委托处理事件。事件的声明类似于具有委托类型的字段,区别在于事件声明前面有 event 关键字。事件通常被声明为public,但允许使用任何可访问性修饰符。下面的示例演示了 delegate 和 event 的声明。
// 声明委托
public delegate void CustomEventHandler(object sender,System.EventArgs e);
// 声明事件
public event CustomEventHandler CustomEvent;
事件委托是多路广播的,这意味着它们可以对多个事件处理方法进行引用。通过维护事件的已注册事件处理程序列表,委托为引发事件的类担当事件发送器的角色。下面的示例演示如何为多个函数订阅事件。EventClass 类包含委托、事件和调用事件的方法。请注意调用事件只能从声明该事件的类内部进行。然后,TestEvents 类使用 += 运算符订阅事件,并使用 -= 运算符取消订阅。调用 InvokeEvent 方法时,它将激发事件,所有订阅了该事件的函数也同步激发,如下面的示例所示:
public class EventClass
{
// 声明委托
public delegate void CustomEventHandler(object sender, System.EventArgs e);
// 声明事件
public event CustomEventHandler CustomEvent;
public void InvokeEvent()
{
// 调用事件,注意,一但调用,就是触发所有的event,而不是第一个
CustomEvent(this, System.EventArgs.Empty);
/*另外一种调用方式 if (CustomEvent != null)
{
foreach (Delegate delItem in CustomEvent.GetInvocationList())
{
delItem.DynamicInvoke(this, System.EventArgs.Empty);
}
}
*/
}
}
class TestEvents
{
private static void CodeToRun(object sender, System.EventArgs e)
{
System.Console.WriteLine("CodeToRun is executing");
}
private static void MoreCodeToRun(object sender, System.EventArgs e)
{
System.Console.WriteLine("MoreCodeToRun is executing");
}
static void Main()
{
EventClass ec = new EventClass(); ec.CustomEvent += new EventClass.CustomEventHandler(CodeToRun);
ec.CustomEvent += new EventClass.CustomEventHandler(MoreCodeToRun);
System.Console.WriteLine("First Invocation:"); ec.InvokeEvent();
ec.CustomEvent -= new EventClass.CustomEventHandler(MoreCodeToRun);
System.Console.WriteLine("\nSecond Invocation:");
ec.InvokeEvent();
}
}
这是反汇编的代码结构:
通过ildasm反汇编可以看到 public event CustomEventHandler CustomEvent 声明了两个成员
.field private class EventDelegateTest.EventClass/CustomEventHandler CustomEvent
和对CustomEvent的一个包装:
.event EventDelegateTest.EventClass/CustomEventHandler CustomEvent
{
.addon instance void EventDelegateTest.EventClass::add_CustomEvent(class EventDelegateTest.EventClass/CustomEventHandler)
.removeon instance void EventDelegateTest.EventClass::remove_CustomEvent(class EventDelegateTest.EventClass/CustomEventHandler)
}
其中在CustomEvent上的+=和-=分别对应add_CustomEvent和remove_CustomEvent操作。
下一篇,从网上转了一篇文章来更深入的探讨delegate和event。
- 大小: 98.5 KB
分享到:
相关推荐
在C#编程语言中,事件和委托是两个关键概念,它们是实现对象间通信和响应机制的核心工具。本文将深入探讨这两个概念,并提供详细的解释。 首先,我们要理解什么是委托(Delegate)。委托在C#中是一种类型,它代表了...
在.NET Framework中,事件模型基于委托(Delegate)和事件(Event)。委托是类型安全的函数指针,它允许我们将方法作为参数传递给其他方法。事件是对象公开的一种通知机制,当特定条件满足或状态改变时,对象会触发...
在实际开发中,事件和委托广泛应用于UI编程、多线程通信、数据绑定等多种场景,提高了代码的可维护性和可扩展性。 总结来说,事件触发是对象间通信的重要方式,而委托是实现这一通信的机制。事件源通过委托将事件...
委托(Delegate)和事件(Event)是C#中非常重要的两种机制,它们在.NET框架中扮演着极其重要的角色。理解这两种概念,对于深入学习C#编程语言,构建高效、可维护的程序架构至关重要。首先我们来探讨一下委托的概念...
在.NET框架中,委托和事件是两种非常重要的编程概念,它们是实现对象间通信和异步编程的关键。本文将深入探讨这两个主题,并结合线程使用,以帮助理解它们的细节和实际应用。 首先,让我们从基础开始,了解什么是...
总的来说,委托和事件是C#中实现回调和异步编程的关键工具,它们使得代码更加灵活,能够更好地响应外部事件和用户交互。理解和熟练使用委托和事件对于开发高效、可维护的.NET应用程序至关重要。在实际编程中,它们常...
在异步编程中,`async/await`关键字配合事件和委托,可以实现非阻塞的IO操作。 总的来说,C#中的委托和事件是构建可扩展和响应式应用的核心工具。通过理解并熟练掌握它们,开发者可以编写出更加灵活和健壮的代码。...
在Windows Forms(Winform)开发中,委托和事件是两个重要的概念,它们为对象间的通信提供了强大而灵活的机制。本文将深入探讨这两个概念,并通过一个经典的子父窗口互传值的例子来阐述它们的使用。 首先,让我们...
本文将深入探讨.NET委托和事件,以及它们如何在实际应用中发挥作用。 首先,我们需要了解什么是委托。委托在.NET中可以被视为类型安全的函数指针,它允许我们将方法作为参数传递,或者存储方法以便稍后调用。这种...
本文将深入探讨C#中的委托和事件的概念及其应用,并通过具体示例来帮助理解这些核心概念。 #### 二、委托的基本概念 ##### 2.1 委托定义 - **委托**是一种引用类型的数据结构,它用来封装方法的引用。 - 它可以...
在C#编程语言中,委托和事件是两个关键概念,它们是实现面向对象程序设计中的重要组成部分。在本文中,我们将深入探讨这两个概念,并通过示例来解释它们的工作原理。 首先,让我们了解一下委托。委托在C#中可以看作...
在C#编程语言中,委托(Delegate)是一个强大的特性,它允许我们将方法作为参数传递给其他方法,或者存储和调用方法的集合。这个特性在事件处理、回调函数以及实现函数式编程风格时非常有用。在本文中,我们将深入...
在C#编程语言中,委托和事件是两个关键的概念,它们是实现面向对象设计模式,尤其是事件驱动编程的核心。本文将深入探讨这两个概念,并提供相关的示例和应用场景,以帮助你更好地理解和应用。 首先,我们来了解**...
委托和事件是C#编程语言中的核心特性,用于实现对象之间的通信和回调机制。在.NET框架中,它们扮演着至关重要的角色,特别是在设计模式和组件交互方面。让我们深入探讨这两个概念,以及如何在实际开发中有效利用它们...
在实际应用中,C#的委托和事件广泛应用于事件驱动编程,如UI控件事件、网络通信、多线程等。例如,`System.Threading.Tasks.Task`类的`ContinueWith`方法接受一个`Action<Task>`类型的委托,用于定义在任务完成后...
在面向对象编程语言C#中,委托(Delegate)和事件(Event)是两个重要的概念。本文将深入探讨这两者之间的关系及其在实际开发中的应用。 #### 二、委托(Delegate) 1. **定义**: - 委托在C#中类似于C++中的函数...
委托和事件是C#编程语言中的核心特性,主要用于实现对象之间的通信和异步操作。本文将深入探讨这两个概念,以及它们在实际应用中的工作原理。 首先,我们来了解委托(Delegate)。委托可以看作是面向对象的函数指针...