继承Form添加控件的时候,为什么需要把控件做为成员变量。
MainForm:Form
利用designer拖入一个名为ConfirmButton的Button.代码生成如下。{
private **.Button ConfirmButton;
this.ConfirmButton=new Button();
        ......
this.Controls.add(this.ConfirmButton);}
我的问题是既然Controls已经聚合了ConfirmButton,ConfirmButton会成为Controls的成员变量,就没有必要吧ConfirmButton作为MainForm的成员变量了。因为成员变量从语义上来说这里始终表示两个类聚合关系。
这样岂不是MainForm聚合Button.和Controls。 同时Controls有聚合了ConfirmButto控件聚合Form

解决方案 »

  1.   

    为了访问方便。事实上如果你不用设计器,直接这么写也是可以的:
    class MyForm : Form
    {
        public MyForm() { Controls.Add(new Button()); }
    }
      

  2.   

    唉晕死!vs有一种很傻的工具(实际上别的许多所谓的软件工程工具也有),就是从代码直接产生类图。其实这是产生垃圾的!lz的做法也是。死抠代码,你一定产生一堆垃圾,从而让你得到的设计图非常纠结。我们都是根据设计图来写严格地测试代码,但是从来不根据代码来死抠设计图。代码中一定有一大堆东西是在设计上不需要的,如果你以为代码中的东西一定等于设计上的内容,那么你就本末倒置了。比如说我不但可以设计一个ConfirmButton变量,我还可以设计一个SpecialButton变量,也指向同一个对象,因为以前写的几百行代码使用这个变量而我不想修改代码了。那么我写代码时就知道不同变量指向的是同一个对象,而这个对象其实是通过加入Controls从而加入控件树的。那么我设计时明明知道写2个、或者100个变量也是指同一个东西,你为什么偏偏死抠代码而要认为他们是“聚合”了不同的东西呢?不要从代码死抠设计,那是本末倒置的。请扔掉编程语言的偏见,设计是先于编写代码的,而编写代码完全可以有无数超出设计的语句。