C#——事件

来源:互联网 发布:java注解不属于 编辑:程序博客网 时间:2024/06/05 11:17

消息流


普通事件:

using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Reflection;namespace Test{    // 定义了一个委托类型    delegate void Handler();    class Incrementer    {        // 声明CountedADozen是个事件成员        // 其次它对应的委托类型为Handle委托类型        public event Handler CountedADozen;        public void DoCount()        {            for( int i = 1; i < 100; i++ )                if( i % 12 == 0 && CountedADozen != null )                    CountedADozen();        }    }    class Dozens    {        public int DozensCount { get; private set; }        public Dozens(Incrementer inc)        {            DozensCount = 0;            inc.CountedADozen += IncrementDozenCount;        }        void IncrementDozenCount()        {            DozensCount++;        }    }    class Program     {        static void Main()        {            Incrementer inc = new Incrementer();            Dozens dosCount = new Dozens(inc);            inc.DoCount();            Console.WriteLine("Number of dozens = {0}", dosCount.DozensCount );        }    }}

运行结果:
这里写图片描述


标准事件:

using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Reflection;// 标准事件EventHandler是定义在System中的一个委托类型// public delegate void EventHandler( object sender, EventArgs e );/* 参数基类    public class EventArgs    {        // 摘要:        //     表示没有事件数据的事件。        public static readonly EventArgs Empty;        // 摘要:        //     初始化 System.EventArgs 类的新实例。        public EventArgs();    }*/// 默认情况下EventArgs e并不传递参数,需要传递参数的时候需要从上面的基类派生// 这样做所有的EventHandle都有统一的接口形式namespace Test{    class Incrementer    {        // 声明CountedADozen是个事件成员        // 其次该事件对应的是标准时间类型,不传递参数,注意和下面例子区别        public event EventHandler CountedADozen;        public void DoCount()        {            for( int i = 1; i < 100; i++ )                if( i % 12 == 0 && CountedADozen != null )                    CountedADozen( this, null );        }    }    class Dozens    {        public int DozensCount { get; private set; }        public Dozens(Incrementer inc)        {            DozensCount = 0;            inc.CountedADozen += IncrementDozenCount;        }        void IncrementDozenCount( object sender, EventArgs e )        {            DozensCount++;        }    }    class Program     {        static void Main()        {            Incrementer inc = new Incrementer();            Dozens dosCount = new Dozens(inc);            inc.DoCount();            Console.WriteLine("Number of dozens = {0}", dosCount.DozensCount );        }    }}

运行结果:
这里写图片描述


带参数标准事件:

using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Reflection;// 标准事件EventHandler是定义在System中的一个委托类型// public delegate void EventHandler( object sender, EventArgs e );/* 参数基类    public class EventArgs    {        // 摘要:        //     表示没有事件数据的事件。        public static readonly EventArgs Empty;        // 摘要:        //     初始化 System.EventArgs 类的新实例。        public EventArgs();    }*/// 默认情况下EventArgs e并不传递参数,需要传递参数的时候需要从上面的基类派生// 这样做所有的EventHandle都有统一的接口形式// 派生类的作用namespace Test{    public class TestEventArgs : EventArgs    {        public int CurrentIndex { set; get; }    }    class Incrementer    {        // 声明CountedADozen是个事件成员        // 其次该事件对应的是标准时间类型,传递的参数是TestEventAgrs !!!        public event EventHandler<TestEventArgs> CountedADozen;        public void DoCount()        {            for( int i = 1; i < 100; i++ )                if( i % 12 == 0 && CountedADozen != null )                {                    TestEventArgs arg= new TestEventArgs();                    arg.CurrentIndex = i;                    CountedADozen( this, arg );                }        }    }    class Dozens    {        public int DozensCount { get; private set; }        public Dozens(Incrementer inc)        {            DozensCount = 0;            inc.CountedADozen += IncrementDozenCount;        }        void IncrementDozenCount( object sender, TestEventArgs e )        {            Console.WriteLine( "Current index is : {0}", e.CurrentIndex );            DozensCount++;        }    }    class Program     {        static void Main()        {            Incrementer inc = new Incrementer();            Dozens dosCount = new Dozens(inc);            inc.DoCount();            Console.WriteLine("Number of dozens = {0}", dosCount.DozensCount );        }    }}

测试结果:
这里写图片描述

【返回】

C#——分类目录

0 0
原创粉丝点击