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;
)//回车退出
{
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#事件触发机制的更多相关文章
- 【深入浅出Linux网络编程】 “基础 -- 事件触发机制”
回顾一下“"开篇 -- 知其然,知其所以然"”中的两段代码,第一段虽然只使用1个线程但却也只能处理一个socket,第二段虽然能处理成百上千个socket但却需要创建同等数量的线程 ...
- EventEmitter:nodeJs事件触发机制
Node.js 所有的异步 I/O 操作在完成时都会发送一个事件到事件队列 Node.js 里面的许多对象都会分发事件:一个 net.Server 对象会在每次有新连接时触发一个事件, 一个 fs.r ...
- [转载] 理解 epoll 的事件触发机制
原文: http://weibo.com/p/1001603862394207076573?sudaref=weibo.com epoll的I/O事件触发方式有两种模式:ET(Edge Trigger ...
- html元素双击事件触发机制猜想及疑惑
今天有个同事遇到一个奇怪的问题,我照着他的代码做了一些简化写了这个demo <!DOCTYPE html> <html> <head> <style type ...
- WinForm中的事件触发机制学习
在一个Form窗体中拖个按钮,双击后系统自动生成代码: private void button1_Click(object sender, EventArgs e) { } 同时在窗体的Initial ...
- Yii中事件触发机制
控制器初始化中添加事件处理方法,在需要触发的地方直接触发 public function init() { parent::init(); // TODO: Change the autogenera ...
- python 模拟事件触发机制
EventManager.py # -*- encoding: UTF-8 -*- # 系统模块 from queue import Queue, Empty from threading impor ...
- 基于raw os 的事件触发系统
Raw os的事件触发系统有以下特点: 1 基于UML的状态机理念设计,实现了有限状态机(fsm)以及层次状态机(HSM). 2 实现了活动对象(ACTIVE OBJECT)的特性,一个活动对象包含了 ...
- JQuery的方便之处——宽高设置、坐标值和滚动条+事件绑定机制
1.元素的宽高 可以通过css来进行设置,例如:$("元素").css({"宽度":"值","高度":"值&q ...
随机推荐
- 【HTTP】HTPP学习笔记
1.了解web及网络基础 HTTP的诞生 TCP/IP协议族 应用层 FTP文件传输协议 HTTP超文本传输协议 DNS域名系统:IP地址<--->域名 传输层 TCP传输控制协议 三次握 ...
- R中常用数据挖掘算法包
数据挖掘主要分为4类,即预测.分类.聚类和关联,根据不同的挖掘目的选择相应的算法.下面对R语言中常用的数据挖掘包做一个汇总: 连续因变量的预测: stats包 lm函数,实现多元线性回归 stats包 ...
- c++ 之重要性
c++的功能比c语言大的多,c语言偏最底层,且程序短小,而对于一个大的系统,用c++,因为它具备了c语言的优点. 很多学嵌入式的觉得学了c语言之后,就不用学c++了,会认为c++很简单,然而,c++并 ...
- python 时间感觉能用到的
datetime, string, timestamp 互转 import time import datetime print datetime.datetime.now() print datet ...
- Data Structure Binary Tree: Convert an arbitrary Binary Tree to a tree that holds Children Sum Property
http://www.geeksforgeeks.org/convert-an-arbitrary-binary-tree-to-a-tree-that-holds-children-sum-prop ...
- 【leetcode刷题笔记】Maximal Rectangle
Given a 2D binary matrix filled with 0's and 1's, find the largest rectangle containing all ones and ...
- Java -- 国际化 多语化
1. 以中英两种语言做示例,显示 "hello" 2. 建立英文语言文件 "mess_en_US.properties ", 输入内容 "hello= ...
- UOJ278 【UTR #2】题目排列顺序
本文作者:ljh2000 作者博客:http://www.cnblogs.com/ljh2000-jump/转载请注明出处,侵权必究,保留最终解释权! 题目链接: http://uoj.ac/co ...
- C#统计目录中文件MD5值
1. [代码]统计目录中文件MD5值 using System.IO;using System.Security.Cryptography;using System.Collections;using ...
- WebElement接口获取值
通过WebElement接口获取值 size 获取元素的尺寸 text 获取元素的文本 get_attribute(name) 获取属性值 location 获取元素坐标,先找到要获取的元素,再调用该 ...