考试系统(四) 容器-组件-服务

前言:

           上次写了个容器的文章、这几天又深入的了解了下、今天就说说 容器-组件-服务。


容器:

          容器是封装和跟踪零个或更多个组件的对象。在此上下文中,包容是指逻辑包容,而不是直观包容。可以在多种方案下使用组件和容器,包括可视化方案和非可视化方案。


给实现者的说明 要成为容器,类必须实现 IContainer 接口,该接口支持添加、移除和检索组件的方法。


什么是物理包含和逻辑包含?

物理包含:如List<>在内存中就是无里包含、组件实在List<>对象的里面



逻辑包含:容器与组件之间只是逻辑上有包含关系、而不是放到容器内部



其他扩展(容器可以包含容器、互相嵌套)


 


        在.net中将直接或间接实现了System.ComponentModel.IContainer接口的类称之为“容器”,直接或者间接实现了System.ComponentModel.IComponent接口的类称之为组件,容器与组件的关系为“逻辑包含”。另外,容器内严格的规定,必须是“组件”也就是实现了组件接口。

 

//IContainer接口

public interface IContainer : IDisposable

{

    // Methods

    void Add(IComponent component);

    void Add(IComponent component, string name);

    void Remove(IComponent component);

 

    // Properties

    ComponentCollection Components { get; }

}


 

           可以看出只要是容器都会有添加删除组件的方法、IContainer接口实现了IDsponsable接口、说明容器都遵循遵守“Dispose”模式(释放模式:回收非托管对象)


资料链接

Dispose 模式

  官网帮助

 

组件:

关于组件的几点总结

         1)  将直接或者间接实现了System.ComponentModel.IComponent接口的类称之为“组件”;

         2)  组件是一个类,实现了IComponent接口的特殊的类;

          3)  组件一定是类,但类不一定是组件;

          4) 组件支持编程可视化。

          5)  组件需要遵循“Dispose”模式,因为它实现了IComponent接口,而IComponent接口又实现了IDisposable接口。

 

 

 

<span style="font-size:18px;">//System.ComponentModel.IComponent接口

public interface IComponent : IDisposable

{

    // Events

    event EventHandler Disposed;

 

    // Properties

    ISite Site { get; set; }

}
</span>

 

ISite的作用其实就是关联一个组件和一个容器、前面说到了这次讲的容器是关联、那就让我们看看ISite接口的代码


<span style="font-size:18px;">public interface ISite : IServiceProvider
{
    // Properties
    IComponent Component { get; }
    IContainer Container { get; }
    bool DesignMode { get; }
    string Name { get; set; }
}</span>

通过Component属性和Container属性,我们就应该很容易的知道ISite的作用其实就是关联一个组件和一个容器,将一个组件和一个容器关联起来。他们之间的关联就是通过ISite维持的,也就是说,容器可以通过ISite与它内部的组件通信,反过来,组件也可以使用ISite与它所在的容器通信,因此,得出结论如下:


1 容器与组件的通讯关系是通过ISite维持的

2 容器何以作为桥梁、所以每个组件之间也是可以互相通信的(图)



3 既然IContainer实现了IDisposable接口,IComponent接口也实现了IDisposable接口,再加上容器中是存放组件的,因此,我们可以认为,容器还有更重要的一个功能,那就是统一负责它其中的组件的资源释放。当容器Dispose的时候,里面所有的组件都跟着Dispose。

 

服务


        组件与容器关联之后、组件就享受容器的服务、比如上面说的组件与容器关联后、组件就能与容器和其他组件通信、这一点组件自己是做不到的、是容器帮助组件做到的、这就是容器给组件提供的服务、当然服务也不止这个、我们可以写很多服务。


一个容器的例子分享给大家


其中,可以自定义服务,来控制消息格式化。xp .net3.5运行通过,源码下载地址:http://files.cnblogs.com/xiaozhi_5638/Container_Component_Service.rar

 

总结:

        这个例子是在晚上找的、还没看太懂、这两天还是有收获的吧、从使用微软提供的容器List集合,到实现容器和组件的接口、自己写容器、自给自足、相信以后会对容器的理解更加深刻。

 

 

参考文章:http://www.cnblogs.com/xiaozhi_5638/archive/2013/04/12/3016892.html

 

 

————————————————chenchen————————————————

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 8
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值