C#事件触发机制

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C#事件触发机制相关的知识,希望对你有一定的参考价值。

C#的事件触发机制,类似于c++的回调函数机制

 

我先简单说一下,委托和事件的实质,后期再重开一篇博文来详细说

委托:指向方法的指针,类似于C的函数指针

事件:是一个可以存放0个或多个方法指针的数据结构  .......... 在一次编译后会为其生成一个类等等的就以后另开博文说了

 

看看触发机制

 

技术分享

 

 方便理解,来个通俗一点的图

技术分享

 



 

事件触发源类

    class cclass
    {
        private char i;

        public delegate void ichanged(cclass s);

        public event ichanged value_changed;

        protected virtual void onvaluechanged(cclass message_str)//在onxxxxxx方法中触发事件
        {
            ichanged temp_value_changed = Volatile.Read(ref value_changed);//保持线程安全,保留一个备份
            if (temp_value_changed != null)
            {
                temp_value_changed(message_str);
            }
        }

        public char I
        {
            get
            {
                return i;
            }
            set
            {
                if(value!=i)
                {
                    i=value;
                    this.onvaluechanged(this);//值修改时调用onxxxxxxx方法
                }
            }
        }
    }

 

 

在另一个类中为事件注册方法,修改值时触发事件,执行方法

 class Program
    {
        static void Main(string[] args)
        {
            cclass c = new cclass();
            c.value_changed+=c_value_changed;//把方法注册到事件上,
            char i = Console.ReadKey().KeyChar;
            while(i!=13)//回车退出
            {
                Console.WriteLine();
                c.I = i;//值修改,事件被触发,执行注册到事件上的所有方法
                i = Console.ReadKey().KeyChar;
            }
        }

        private static void c_value_changed(cclass s)
        {
            Console.WriteLine("value is changed>>>>i:"+s.I);
        }
    }

 

 

 

 

效果

技术分享

 

 

 

源码连接:http://pan.baidu.com/s/1i3UXHKp

 

以上是关于C#事件触发机制的主要内容,如果未能解决你的问题,请参考以下文章

事件触发机制

浏览器事件机制

水平与边缘触发网络事件机制

Android Activity 和 ViewGroup中事件触发和传递机制

python 模拟事件触发机制

mina IoHandler 事件触发机制