对象间通信方法之一:通过委托实现(C#语言)

对象间通信之委托
本文介绍了一种简单有效的对象间通信方法——委托。通过定义委托类、接收消息的类和发送消息的类,实现了复杂数据的传递。适用于VS2003环境下多窗口间的数据交互。

对象间通信有一种简单的方法:委托。

窗体是最常见的对象,所以窗体间的通信是对象通信的一个特殊情况,网友佚名写的文章对其进行了详细的说明,见《Vs2003多窗口下的复杂数据传递》一文:

http://www.cnblogs.com/xxm/archive/2006/07/01/440392.html

相信大家如果理解了上面这篇文章,也就会用委托进行对象间的通信了。下面根据上面这个例子解释一下每一步的作用,并将使用它的场合由特殊(窗体间)引向一般(对象间)希望对大家理解有所帮助:

其实要定义这个通信过程,主要分为三个部分:接收消息的类A中的代码和发送消息的类B中的代码和委托类C

首先要定义委托类C

环境:winXPsp2 + VS2003.NET

namespace Felomeng.委托通信演示

{

public class C

{

public delegate void EventNameHandler();//定义委托,用于类间通信其中“EventName”是用户将要定义的触发通信事件的名称,下同。

public class EventNameEvent//定义中介类,主要的中间变量都在此定义

{

public type Array1;//中间变量1,可以为任意类型

public type Array2;//中间变量2,……

………… //中间变量列表

public event EventNameHandler Evented;//定义下载状态触发器Evented

public void Eventing()//触发事件

{

if ( Evented != null )

{

Evented();//如果触发则执行EventEve()

}

}

}

}

}

再编写要接受消息的类A中代码:

namespace Felomeng.委托通信演示

{

public class A

{

//……

//……类A中的其它代码

//……

C.EventNameEvent eventNameEvent = new C.EventNameEvent();//实例化一下中介类的对象

private void eventNameEvent_Evented()//定义一个事件触发后执行的方法

{

//根据类B传递过来的值进行相应的操作,主要是对本类内的对象进行控制,如改变控件属性,更改变量值等。如

if ( Array1 == 0 )

{

//控制代码

}

}

public A()

{

eventNameEvent.Evented += new C.EventNameHandler ( eventNameEvent_Evented );//在类B中添加事件,用于触发过程eventNameEvent_Evented,括号内的事件参数名eventNameEvent_Evented必须与上面定义的事件触发后执行的方法同名,其实是实例化一个public event的对象

B b = new B( eventNameEvent );//调用B的重载实例化B以实现BA发送消息,B的重载定义见下面B内的代码。

//执行B的对象b的代码

//……

//……类A中的其它代码

//……

}

}

最后编写发送消息的类B中的代码:

namespace Felomeng.委托通信演示

{

public class B

{

//……

//……类B中的其它代码

//……

private C.EventNameEvent EventedEvnet;//实例化一个类

public B( C.EventNameEvent eventedEvnet ):this()//定义B的一个重载

{

this.EventedEvnet = eventedEvnet;//关联触发事件

}

privatevoidSomeMethod()

{

EventedEvnet.Array1 = 0;//改变中间变量的值

…………………… //改变中间变量的值

EventedEvnet.Eventing();//触发事件(执行类A中定义的触发事件执行的方法),向类A发送相应的消息(主要是变量Array1,Array2,……等的值的变化后的值

}

//……

//……类B中的其它代码

//……

}

}

Vs2003多窗口下的复杂数据传递》一文中,网友佚名的例子非常简洁,就把中介类写在了主窗体这个类当中,这样做是可以的。但如果要做工程(尤其是大量代码的情况),这样做就不太合适了。所以笔者在这里所举的例子中,有意识将三个类分别放入三个文件,目的就是要提大家一定要养成按照编码规范编写程序的习惯。这样往往会使程序更加清晰易懂,从而使以后的编码及程序的维护变地简单了。关于编码规范,笔者推荐::《C# Coding Style Guideby: Salman Ahmed。可以在如下网址免费下载:

http://www.icsharpcode.net/TechNotes/

如果不谙英文,可以参看:

http://dev.youkuaiyun.com/develop/article/25/25417.shtm

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值