您的位置:首页 > 其它

关于委托的简单认识

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;

}

}

这是在程序中遇到的关于委托与回调函数的用法。当然,由于对它的实现机制和应用还不是太了解,所以在这里只提出来在这次开发中遇到的问题,有待解决。

事件回调与委托的关系和用法还需要去学习和了解。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: