private System.ComponentModel.IContainer components = null;       
        protected override void Dispose(bool disposing)
        {
            if (disposing && (components != null))
            {
                components.Dispose();
            }
            base.Dispose(disposing);
        }这都是窗体设计器自动生成的代码。
----------------------------------------------------------------
    但是,我搞不懂的是 第一句声明字段 起什么作用。
   1 如:form类应该有container属性,form1应该继承了这个属性了,为什么在form1中还要声明这个字段。
    查msdn:
    form类container属性,解释为获取 IContainer,它包含 Component。语法:public IContainer Container { get; }。
    //可知此属性获取的是IContainer接口。
    IContainer 接口 ,解释:提供容器的功能。容器是在逻辑上包含零个或更多个组件的对象。//这里的组件,我理解为组件类而不是组件接口。 
    IContainer.Components 属性 ,语法为:ComponentCollection Components { get; }。解释为:获取 IContainer 中的所有组件。
    //我仍理解为是组件类(Component)的集合。
   但是,ComponentCollection类,解释为:为 IComponent 对象的集合提供只读容器。
   构造函数public ComponentCollection (IComponent[] components)
   //我理解这个类指的是IComponent接口的集合。  
  而组件(Component)是IComponent接口的默认实现。
  由此,产生疑问,前后的各个说明,应该说从文字上或者语法上,最后归纳出有个区别,就是前面指的是 组件对象(Component)而后边是IComponent接口,不知这该怎么理解,因为我觉得 组件对象(Component)和 IComponent接口是完全不同的对象。
    1 请先解释一下,上面的部分该怎么理解,同时,请讲解一下Component是一个什么样的类,起到什么作用。因为组件这个概念现在也找不到一个比较标准的定义。只要在net框架下能理解组件是个什么东西就可以了。
    2 既然有container属性了,form1类还声明IContainer 接口的字段是干什么?
    3 private System.ComponentModel.IContainer components = null;把接口描述为null这种语法表示什么呢?以前只见过类的实例为null这种描述。所以该怎么理解呢?