关于委托的简单认识
2012-05-03 14:14
162 查看
最近公司给了一个语音卡的开发接口,让我做一个用语音卡自动呼出与应答的功能。想了好几天,没什么思绪,当然身边还是有参考文档的,耐着性子,把开发文档又从头到尾看了一遍。对与我来说,如何开头,如何最有效率的用到那些方法,一般都是困扰我的事情,但 还是要多写代码,多测试,不断摸索才行,不能就一直在那儿想。下面主要讲一下在这次开发过程中遇到的关于事件回调函数和委托的问题。
先讲一下自己对委托的一些理解:
1.委托是将方法当做变量来使用的一种机制
作为回调方法、实现事件
2.委托是一种类型
3.语法
[访问修饰符]delegate 类型名 委托名(参数列表)
4.使用
准备方法→准备委托类型→定义委托变量→使用
委托就是一个类型,这个类型根据方法来定义
该类型的变量,可以存放方法名,使用的时候可以进行调用
调用的方法内容就是赋值的时候,指定的方法所包含的内容
public delegate voidFunDelegate();//委托就是一个类型,这个类型根据方法来定义,因为下面的方法时void fun1()和void
fun2(); 所以委托写成voidFunDelegate()
class program
{
staticvoid main(string[] args)
{
FunDelegateFD;//申明一个FunDelegate类型的变量
FD=Fun1;//
FD存Fun1这个方法名
FD();//调用的内容就是复制的时候指定的方法(Fun1)所包含的内容
FD=Fun2;
FD();
}
staticvoid Fun1()
{
Console.WriteLine(“Fun1”);
}
static voidFun2()
{
Console.WriteLine(“Fun2”);
}
}
接下来,在程序中写了一个类,其中对委托的定义如下 : public delegate void PhonicCallBack(
EPhonicEvent eventType,
int channelType,
int channelID,
int iParam1,
int iParam2);
在Form_load事件中,根据接口文档的提示,首先必须调用PhonicDLL.tpi_SetEventNotifyCallBackProc(“回调函数名称”); //可将回调函数名称替换为:MyPhonicCallBack
我们的回调函数是: public void MyPhonicCallBack(
PhonicDLL.EPhonicEvent eventType,
int channelType,
int channelID,
int iParam1,
int iParam2)
{
switch (eventType)
{
case PhonicDLL.EPhonicEvent.eventDeviceTimer:
PhonicDLL.SendMessage(this.Handle, WM_DEVICE_TIMER, (((uint)channelType) << 16) | ((uint)channelID), 0);
break;
case PhonicDLL.EPhonicEvent.eventRing:
PhonicDLL.SendMessage(this.Handle, WM_RING, (((uint)channelType) << 16) | ((uint)channelID), 0);
break;
case PhonicDLL.EPhonicEvent.eventCallIn:
PhonicDLL.SendMessage(this.Handle, WM_CALL_IN, (((uint)channelType) << 16) | ((uint)channelID), (uint)iParam1);
break;
case PhonicDLL.EPhonicEvent.eventDTMF:
PhonicDLL.SendMessage(this.Handle, WM_DTMF, (((uint)channelType) << 16) | ((uint)channelID), (uint)iParam1);
break;
case PhonicDLL.EPhonicEvent.eventHangup:
PhonicDLL.SendMessage(this.Handle, WM_HANG_UP, (((uint)channelType) << 16) | ((uint)channelID), 0);
break;
case PhonicDLL.EPhonicEvent.eventIdle:
PhonicDLL.SendMessage(this.Handle, WM_IDLE, (((uint)channelType) << 16) | ((uint)channelID), 0);
break;
}
}
这是在程序中遇到的关于委托与回调函数的用法。当然,由于对它的实现机制和应用还不是太了解,所以在这里只提出来在这次开发中遇到的问题,有待解决。
事件回调与委托的关系和用法还需要去学习和了解。
先讲一下自己对委托的一些理解:
1.委托是将方法当做变量来使用的一种机制
作为回调方法、实现事件
2.委托是一种类型
3.语法
[访问修饰符]delegate 类型名 委托名(参数列表)
4.使用
准备方法→准备委托类型→定义委托变量→使用
委托就是一个类型,这个类型根据方法来定义
该类型的变量,可以存放方法名,使用的时候可以进行调用
调用的方法内容就是赋值的时候,指定的方法所包含的内容
public delegate voidFunDelegate();//委托就是一个类型,这个类型根据方法来定义,因为下面的方法时void fun1()和void
fun2(); 所以委托写成voidFunDelegate()
class program
{
staticvoid main(string[] args)
{
FunDelegateFD;//申明一个FunDelegate类型的变量
FD=Fun1;//
FD存Fun1这个方法名
FD();//调用的内容就是复制的时候指定的方法(Fun1)所包含的内容
FD=Fun2;
FD();
}
staticvoid Fun1()
{
Console.WriteLine(“Fun1”);
}
static voidFun2()
{
Console.WriteLine(“Fun2”);
}
}
接下来,在程序中写了一个类,其中对委托的定义如下 : public delegate void PhonicCallBack(
EPhonicEvent eventType,
int channelType,
int channelID,
int iParam1,
int iParam2);
在Form_load事件中,根据接口文档的提示,首先必须调用PhonicDLL.tpi_SetEventNotifyCallBackProc(“回调函数名称”); //可将回调函数名称替换为:MyPhonicCallBack
我们的回调函数是: public void MyPhonicCallBack(
PhonicDLL.EPhonicEvent eventType,
int channelType,
int channelID,
int iParam1,
int iParam2)
{
switch (eventType)
{
case PhonicDLL.EPhonicEvent.eventDeviceTimer:
PhonicDLL.SendMessage(this.Handle, WM_DEVICE_TIMER, (((uint)channelType) << 16) | ((uint)channelID), 0);
break;
case PhonicDLL.EPhonicEvent.eventRing:
PhonicDLL.SendMessage(this.Handle, WM_RING, (((uint)channelType) << 16) | ((uint)channelID), 0);
break;
case PhonicDLL.EPhonicEvent.eventCallIn:
PhonicDLL.SendMessage(this.Handle, WM_CALL_IN, (((uint)channelType) << 16) | ((uint)channelID), (uint)iParam1);
break;
case PhonicDLL.EPhonicEvent.eventDTMF:
PhonicDLL.SendMessage(this.Handle, WM_DTMF, (((uint)channelType) << 16) | ((uint)channelID), (uint)iParam1);
break;
case PhonicDLL.EPhonicEvent.eventHangup:
PhonicDLL.SendMessage(this.Handle, WM_HANG_UP, (((uint)channelType) << 16) | ((uint)channelID), 0);
break;
case PhonicDLL.EPhonicEvent.eventIdle:
PhonicDLL.SendMessage(this.Handle, WM_IDLE, (((uint)channelType) << 16) | ((uint)channelID), 0);
break;
}
}
这是在程序中遇到的关于委托与回调函数的用法。当然,由于对它的实现机制和应用还不是太了解,所以在这里只提出来在这次开发中遇到的问题,有待解决。
事件回调与委托的关系和用法还需要去学习和了解。
相关文章推荐
- Unity下关于C#的文件读写三(Json格式读写-基于LitJson简单认识)
- android关于-->ActivityLifecycleCallbacks接口 的简单认识
- Unity下关于C#的文件读写三(Json格式读写-基于LitJson简单认识)
- Unity下关于C#的文件读写三(Json格式读写-基于LitJson简单认识)
- 关于AIDL的简单认识
- 关于MVC简单认识
- (每日心得)关于C#中委托与事件的一些认识(一)
- 关于java中的“包”与C#中的“命名空间”的简单认识[转]
- Unity下关于C#的文件读写三(Json格式读写-基于LitJson简单认识)
- 关于 OO 及虚拟机的简单认识
- 关于C#多线程委托的简单讲解
- 最简单最明白的关于“事件”和“委托”的例子说明
- 关于C#中Lambda和'函数指针'的简单认识
- 关于注册表的一些简单认识
- 关于strtok的一点简单认识
- 关于Redis的简单认识以及语法学习
- 关于spark的一些简单认识。
- 个人关于委托事件的一些浅显认识
- 我关于c#中委托的简单理解
- (每日心得)关于C#中委托和事件的一些认识(三)