关于Delegate .Net中的委托(1)

最近用到了委托,类似于C里面函数指针一样的东西,总结一下,错误的地方以后发现再来改。

  首先说到委托,不得不先了解同步(sync),非同步(async)和阻塞与非阻塞的概念(Block)

  1.同步与异步的区别在于消息的处理机制,同步为自己关注处理的结果,而异步为等待消息(回调函数)。

  2.阻塞与非阻塞的区别在于:等待(异步)或者关注(同步)的同时:是否能做其他事情。

 

    关于Delegate,委托的用处大概分为以下2种:

    1.起到函数指针的作用,将实例的方法或者类的共享方法当做参数传入过程当中,以便在不同的环境要求下,采用不同的处理方式。但是要求委托的签名与其委托的方法签名相同。

    2.作为异步处理的回调机制如下转载,添加了一些内容

 

 

实现异步调用的步骤和机理 
假设有这样一个方法(Method),它接受一个班级的名称,然后查询数据库,返回这个班级所有同学的名单。 

Class DemoClass

 public shared Function GetStudentsList(ClassName as String)  as String()

'查询数据库

'其它操作

 End function

End Class

如果对这样一个方法进行异步调用的话,那么你首先需要定义一个有同样方法签名(Function Signature)的委托(Delegate,比如 

Delegate Function GetStudentListDelegate (ClassName as String) as String()

下一步,你需要生成一个委托实例(Instance),然后将这个委托和你的真正的方法捆绑起来,如 

Dim delegate as GetStudentListDelegate

GetStudentListDelegate = AddressOf DemoClass.GetStudentsList

(为了简单起见,这里使用了静态方法,这其实不是必须的
当你做到这步的时候,.NET的编译器在后台为你的委托增加了几个方法,它们是Invoke, BeginInvoke, EndInvoke. 
如果你使用Invoke方法,那么其效果是同步调用,比如 

delegate.Invoke("class90")

在这种情况下,委托将输入参数"class90"传递给方法GetStudentsList,然后将这个方法的返回值返回给用户。

 

异步的委托回调机制见下篇

   

转载于:https://www.cnblogs.com/nevermorez/archive/2013/03/14/2959206.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值