创建一个窗体,注意到当向窗体添加某些组件的时候,vs.net设计器会自动将组件添加到私有的components中。并且在窗体的Dispose(bool disposing)方法中,显示释放components。 
为何在每一个窗体中,设计器都自动添加这个私有的components,并且做特别的处理?而不像处理普通控件的方式,将这些组件添加到窗体的公共的属性中?

解决方案 »

  1.   

    好像不是委托,事件
    定义是这样的:private System.ComponentModel.IContainer components = null;
      

  2.   

    那不是事件委托,那是窗体设计器需要的代码,VS通过components便可获知当前窗体有哪些组件。以便在窗体设计器中画出这些组件!
      

  3.   

    因为窗体中并不是所有的对象都是Control的子类,像Timer就是从Component直接继承下来的,像Component的对象也是要存储统一管理并要释放的,这个就是能过这个窗体中的Component类型的容器components 来存储并统一管理的.因此有了components 这个声明,并在窗体释放资源的时候一起把这个容器中的对象一一释放掉.
      

  4.   

    那为什么将components定义为私有?
    每一个form不是都有public IContainer Container { get; }属性吗?
      

  5.   

    因为窗体本身也是从 Component继承来的,所以才会有Container这个属性,但是这个Container本意并不是用来容纳其它组件的,所以容纳其它组件的这个功能自然就是要重新声明一个了.而这个重新声明的并不需要做为Public而供其它之用,所以就是私有的了.
      

  6.   

    那么为什么窗体却使用由control继承而来的公共的Controls属性来容纳他的控件?
    在这一点,设计器将组件与控件区别对待。一个放入私有,一个放入公共。这是为什么?