C#中委托和方法学习心得
来源:互联网 发布:免费淘宝装修生成 编辑:程序博客网 时间:2024/05/16 08:54
最近一直在回想C#中的委托和事件机制,突然觉得其实C#中的委托和时间机制其实真的和C++中的函数指针就是一样一样,可能因为
C#中没有指针所以就弄出了支持委托和事件的机制。C#中它将方法做为特殊的对象进行封装起来,从而实现了将方法名做为变量来使用和进行赋值
操作,C#中定义“函数指针”要用delegate关键字进行修饰。之后就可以直接可以用“函数指针”定义对象或者对象数组并进行赋值,赋值操作完成后就可以直接做为
相应的函数名使用,例如:
----------------------------YYC
public delegate int Func();
static int fun1()
{
return 1;
}
static int fun2()
{
return 2;
}
Func fc;
fc = fun1;
MessageBox.Show("fun1: "+ fc());//输出1
fc = fun2;
MessageBox.Show("fun2: "+ fc());//输出2
其中C#对委托对象估计采用的是一种队列的储存结构,所以委托对象是可以进行加减操作的,
例如:
public delegate int Func();
static int fun1()
{
MessageBox.Show("fun1:");
return 1;
}
static int fun2()
{
MessageBox.Show("fun2:");
return 2;
}
Func fc;
fc = (Func )fun1 + (Func)fun2 ;
fc();
当此时再调用fc()函数fun1()和函数fun2()都会被依据加载的顺序被执行一遍。
但此时应当注意由于委托对象可以进行加减操作,所以再使用任何一个异常是应当先判断该委托是否为空.
当然C#中除了委托外其次很重要的另外一个机制就是事件及事件的发布。C#中出现事件类型的主要目的是由于为了
防止程序员的疏忽或恶意使用=直接再给对托类型对象赋值,从而破坏委托的加载,所以就出现了在使用函数指针定
义对象时要用event关键字进行修饰。
同时在C#的时间发布和订阅过程中为了减少做重复性的工作和提高效率,C#已经为我们定义好了EventHandler委托类型
publuc delegate void EventHandler(oblect sender ,EventArgs e);
其中object类是所有类的基类,用来传递引发事件的对象即为发布者,如果发布者为静态类,则直接传递null即可。一般在发布者类中直接使用this即可。
要注意此时传输时是属于数据的装箱操作,接收该对象后还要进行相应的拆箱操作。
EventArgs时间数据类,主要用于传递事件数据,只要该数据继承了EventArgs即可传输。
总之说白了C#中的委托机制就是和C++中的函数指针是一样的,可以类比的这样去想。而后来的所谓订阅者和发布者机制
也是基于此原理的。
- C#中委托和方法学习心得
- C#中委托和事件
- C#中事件和委托
- C#中委托和事件
- C# 中线程和委托
- c# 多播委托 和匿名方法
- C#委托的BeginInvoke和EndInvoke方法
- C#学习心得(一) 泛型 委托
- C#委托-在窗体中使用委托和事件
- 解析C#中委托和事件
- C#中委托和事件处理
- C#中时间和委托的例子
- C#中委托和事件(续)
- C#中委托的理解和使用
- C#中委托和事件使用教程
- c#中时间和委托的使用
- C#中事件和委托的使用
- C#中委托和事件(续)
- 12.11
- python 内存泄露的诊断
- oracle的执行计划
- 常见集中的排序算法实现
- js客户端判断文件大小限制上传
- C#中委托和方法学习心得
- java中线程中的sleep的使用(计数器)
- Python中函数的定义以及形参实参小结
- 责任链模式
- 广州传智播客学Java推荐就业吗?
- 【面试题二十三】从上往下打印二叉树
- CloudStack 4.3 API 开发指南
- 在BOS中客户端打开报License问题
- linux操作系统入门小结(一)