WEB开发网
开发学院软件开发C语言 适合C# Actor的消息执行方式(3):中看不中用的解... 阅读

适合C# Actor的消息执行方式(3):中看不中用的解决方案

 2010-09-30 20:50:26 来源:WEB开发网   
核心提示: 一个Actor可能会会作为“接受方”遵守多种“通信协议”,经过这样的描述,适合C# Actor的消息执行方式(3):中看不中用的解决方案(2),您是否觉得.NET中有一种东西和“消息”非常接近?没错,那就是“接口

一个Actor可能会会作为“接受方”遵守多种“通信协议”。

经过这样的描述,您是否觉得.NET中有一种东西和“消息”非常接近?没错,那就是“接口”,因为:

“接口”从概念上讲便是一种“协议”。

“接口”表示“能做什么”,但没有限制“怎么做”。

一个Actor可以实现多个接口,即遵守多种协议。

看上去还真是一一对应啊!那么我们再来深入一步进行对比,“接口”能否传递消息所要表现的信息?答案也是肯定的:

做什么事情:接口中的一个方法。

需要的数据:接口的参数。

也就是说,如之前的那条Erlang消息,在C#中便可以表示为:

x.DoSomething(arg1, arg2, arg3, ...)

基于这样的类比,我们发现使用“接口”还可以带来一个额外的东西,那就是“消息组”。如Erlang这样语言,消息与消息之间是完全独立的。.NET中的接口可以包含多个方法,这就是一种“分组”,我们可以利用这种方式来更好地管理有关联的消息。此外,利用.NET中的访问限制符(public,internal等)还可以实现消息的公开和隐藏。而且因为接口的参数是强类型的,所以可以得到编译期的检查,也可以享受编辑工具的代码提示及重构……C#编程里的种种优势似乎我们一个都没有拉下。

看似美好的实现

等一下,接口只是一种“协议”,但是“消息”还必须是一个实体,一个对象,并且“携带”了这个协议才能在Actor之间传递啊。这个对象除了携带协议所需要的数据以外,还要能够告诉接受方究竟该“操作什么”。“操作”带上“数据”,于是我就想到了“委托”。例如,如果我们想要发送一个“协议”,叫做IDoHandler,那么我们便可以构造一个Action<IDoHandler>对象——这正是Lambda表达式的用武之地:

上一页  1 2 3 4 5 6  下一页

Tags:适合 Actor 消息

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接