`
Virgo_S
  • 浏览: 1153754 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

C# 中的委托和事件

    博客分类:
  • .NET
阅读更多
MyClass.cs

using System;
using System.Collections.Generic;
using System.Text;

namespace ConsoleApplication1
{
    //声明一个delegate
    public delegate void EventHandler(string input);

    /// <summary>
    /// 测试C#的event机制
    /// </summary>
    public class MyClass
    {
        //声明一个成员变量来保存事件句柄(事件被激发时被调用的delegate)
        private EventHandler m_Handler = null;

        //激发事件
        public void FireAEvent(string input)
        {
            if (m_Handler != null)
            {
                m_Handler(input);
            }
        }

        //声明事件
        public event EventHandler AEvent
        {
            add//添加访问器
            {
                //注意,访问器中实际包含了一个名为value的隐含参数

                //该参数的值即为客户程序调用+=时传递过来的delegate

                Console.WriteLine("AEvent add被调用,value的HashCode为:" + value.GetHashCode());
                if (value != null) ...{ m_Handler = value; };//设置m_Handler域保存新的handler
            }
            remove//删除访问器
            {
                Console.WriteLine("AEvent remove被调用,value的HashCode为:" + value.GetHashCode());
                if (value != null) ...{ m_Handler = null; };//置m_Handler为null,该事件将不再被激发
            }
        }

        public MyClass()
        {
            //TODO
        }
    }
}

MainClass.cs
using System;
using System.Collections.Generic;
using System.Text;

namespace ConsoleApplication1
{
    class MainClass
    {
        [STAThread]
        static void Main(string[] args)
        {
            //实例化一个MyClass的对象Obj
            MyClass Obj = new MyClass();

            //基于MyEventHandler()函数定义一个EventHandler
            EventHandler MyHandler = new EventHandler(MyEventHandler);
            Console.WriteLine("MyHandler的HashCode为:" + MyHandler.GetHashCode());
            Console.WriteLine();

            //预定事件
            Console.WriteLine("Obj.AEvent += MyHandler被调用");
            Obj.AEvent += MyHandler;
            //激发事件
            Console.WriteLine("Main函数激发Obj的AEvent事件!");
            Obj.FireAEvent("aaa");
            //撤销事件
            Console.WriteLine("Obj.AEvent -= MyHandler被调用");
            Obj.AEvent -= MyHandler;
            Console.WriteLine();
            //再次试图激发事件
            Console.WriteLine("Main函数试图在撤消事件后激发Obj的AEvent事件!");
            Obj.FireAEvent("aaaa");
            Console.WriteLine("---程序运行完毕---");
            Console.ReadLine();
        }

        //真正的事件处理函数
        static void MyEventHandler(string input)
        {
            Console.WriteLine("This is Event!");
        }
    }
}


参考http://blog.csdn.net/delicacylee/archive/2008/03/02/2139928.aspx
分享到:
评论

相关推荐

    C#中的委托和事件(完整版)

    详细讲述了C#中委托和事件的语法及其使用方法,用程序例子深入浅出的讲述了不同的使用方法和这些使用方法的优劣。

    C#中委托与事件的区别

    委托(Delegate)和事件(Event)是C#中非常重要的两种机制,它们在.NET框架中扮演着极其重要的角色。理解这两种概念,对于深入学习C#编程语言,构建高效、可维护的程序架构至关重要。首先我们来探讨一下委托的概念...

    C# 中委托和事件的例子DelegateAndEventDemo

    C# 中委托和事件的例子DelegateAndEventDemo 京华志&精华志出品 希望大家互相学习,互相进步 支持CSDN 支持微软 主要包括C# ASP.NET SQLDBA 源码 毕业设计 开题报告 答辩PPT等

    C#中委托和事件,无多播委托

    ### C#中的委托和事件:理解无多播委托 在.NET框架中,委托与事件是极为重要的编程概念,尤其在C#中它们被广泛应用于多种场景。本文将深入探讨C#中的委托、事件以及无多播委托的概念,并通过具体示例帮助读者更好地...

    c#中委托和事件例子

    在C#编程语言中,委托和事件是两个非常重要的概念,它们主要用于实现对象之间的通信,尤其是在处理异步操作和响应用户界面(UI)交互时。本文将深入探讨这两个概念,并通过一个实例来帮助理解它们的工作原理。 首先...

    C#中委托和事件.pdf

    异步调用是委托中的一个重要概念。委托允许开发者无需等待一个操作完成即可启动其他任务。异步委托通常用于耗时操作,如文件I/O、网络通信等,这样能够避免阻塞主线程。 总之,委托和事件是C#语言中非常强大的特性...

    对C#中委托和事件很生动的描述

    事件发布者定义了一个事件和一个或多个方法来触发该事件。事件订阅者则通过注册自己感兴趣的事件,并提供一个方法来响应事件。 事件的由来与更好的封装性和限制类型能力紧密相关。封装性保证了对象的内部状态对外部...

    C#--委托和事件

    ### C#中的委托和事件 #### 一、委托的基础概念 在C#中,委托是一种引用类型的...事件和委托机制极大地简化了事件处理过程,使得程序设计更加灵活和模块化。希望本文能够帮助大家更好地理解和掌握C#中的事件编程。

    C#的委托和事件详解

    委托 和 事件在 .Net Framework中的应用非常广泛,然而,较好地理解委托和事件对很多接触C#时间不长的人来说并不容易。它们就像是一道槛儿,过了这个槛的人,觉得真是太容易了,而没有过去的人每次见到委托和事件就...

    c#中委托,事件和BeginInvoke在进程间传递消息的作用

    委托、事件和BeginInvoke在C#中是实现进程间消息传递的重要概念和工具。委托可以理解为一个可以持有对具有特定参数列表和返回类型的方法的引用的类型。事件是一种特殊的委托,用于实现发布-订阅模式,其中发布者触发...

    C#中的委托和事件.doc

    ### C#中的委托和事件详解 #### 一、引言 在.NET Framework中,委托(Delegate)和事件(Event)是非常重要的概念,尤其对于那些希望深入掌握C#语言特性的开发者来说更是如此。委托和事件提供了强大的机制来实现...

    C#委托事件-张子阳.pdf

    本文将以“C#委托事件-张子阳.pdf”这份资料为基础,深入探讨委托和事件的基础知识、应用场景以及它们在.NET Framework中的具体实现方式。 #### 二、委托的基本概念 **1. 为什么需要委托** 在前面的例子中,我们...

    C#中的委托和事件.pdf

    委托和事件是C#编程语言中非常重要的两个概念,它们是.NET框架中实现解耦合、异步编程以及观察者设计模式的基础。委托(Delegate)是一种特殊的数据类型,用于封装一个方法的引用。在C#中,委托声明了可以被调用的...

    C#中的委托和事件(续)

    C#,中的委托,和事件,(续) C#,中的委托,和事件,(续) C#,中的委托,和事件,(续) C#,中的委托,和事件,(续) C#,中的委托,和事件,(续) C#,中的委托,和事件,(续) C#,中的委托,和事件,(续) C#,中的...

    C#中的委托和事件(续)

    在C#中,事件和委托虽然紧密相关,但有着本质的不同。委托是一种引用类型的数据结构,用于封装方法的引用;而事件则是基于委托的一种特殊机制,用于实现对象之间的解耦通信。事件的本意是应该由事件发布者触发,而...

Global site tag (gtag.js) - Google Analytics