对象间通信方法之一:通过委托实现(C#语言)
来源:互联网 发布:数据资源建设 编辑:程序博客网 时间:2024/06/05 05:22
对象间通信有一种简单的方法:委托。
窗体是最常见的对象,所以窗体间的通信是对象通信的一个特殊情况,网友佚名写的文章对其进行了详细的说明,见《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以实现B向A发送消息,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;//关联触发事件
}
private void SomeMethod()
{
EventedEvnet.Array1 = 0;//改变中间变量的值
…………………… //改变中间变量的值
EventedEvnet.Eventing();//触发事件(执行类A中定义的触发事件执行的方法),向类A发送相应的消息(主要是变量Array1,Array2,……等的值的变化后的值
}
//……
//……类B中的其它代码
//……
}
}
《Vs2003多窗口下的复杂数据传递》一文中,网友佚名的例子非常简洁,就把中介类写在了主窗体这个类当中,这样做是可以的。但如果要做工程(尤其是大量代码的情况),这样做就不太合适了。所以笔者在这里所举的例子中,有意识将三个类分别放入三个文件,目的就是要提大家一定要养成按照编码规范编写程序的习惯。这样往往会使程序更加清晰易懂,从而使以后的编码及程序的维护变地简单了。关于编码规范,笔者推荐::《C# Coding Style Guide》by: Salman Ahmed。可以在如下网址免费下载:
http://www.icsharpcode.net/TechNotes/
如果不谙英文,可以参看:
http://dev.csdn.net/develop/article/25/25417.shtm
}
- 对象间通信方法之一:通过委托实现(C#语言)
- JAVA通过反映方法实现C#的委托
- JAVA通过反映方法实现C#的委托
- C#源代码—声明委托,通过委托对象调用所指向的方法
- C#使用委托创建事件实现两个窗体间通信
- C#通过委托实现窗体间的控制传递
- C# 委托实现窗口之间通信
- C#中多播委托实现多窗体通信
- 通过Web用户控件实现注册(用委托方法)
- 进程通信方法之一--管道(的容量与实现)
- c#多线程通信之委托(事件)
- c#多线程通信之委托(事件)
- c#多线程通信之委托(事件)
- C#委托的具体实现方法
- 最简单的C#委托实现方法
- C#中使用委托创建事件实现两个窗体间通信
- C# 通过socket实现UDP 通信
- C# 通过socket实现UDP 通信
- MasterPage学习日记
- 构件的概念
- java开源项目:Jdon Framework
- Why my program waste so much memory compare to other guys?
- C语言字符串函数大全
- 对象间通信方法之一:通过委托实现(C#语言)
- 算法(一) 无声的是声音
- WinCE5.0平台下的Moxa DA66x设备应用开发心得
- 在线培训系统设计---课程管理模块(2)
- 漫话计算机主机网关的概念和作用
- 收藏一篇职业选择文章
- JavaScript 验证函数
- SQL中以count及sum为条件的查询
- FUMO协议