代码之家  ›  专栏  ›  技术社区  ›  Alex J

在两个构造函数中初始化组件,还是在一个构造函数继承中初始化组件?

  •  3
  • Alex J  · 技术社区  · 17 年前

    在对组件模型的影响方面,以下两者之间是否存在任何实际差异:

    class MyComponent : Component {
        public MyComponent() {
            InitializeComponent();
        }
    
        public MyComponent(IContainer container) {
            container.Add(this);
            InitializeComponent();
        }
    }
    

    还有:

    class MyComponent : Component {
        public MyComponent() {
            InitializeComponent();
        }
    
        public MyComponent(IContainer container) : this() {
            container.Add(this);
        }
    }
    

    如果不是,为什么微软要为他们的设计师生成的代码选择第一个方法?

    编辑:我的意思是,在初始化组件和将其添加到容器之间,对更改顺序会有任何副作用吗?

    2 回复  |  直到 17 年前
        1
  •  3
  •   Anton Gogolev    17 年前

    执行顺序不同。在

    public MyComponent(IContainer container) {
        container.Add(this);
        InitializeComponent();
    }
    

    InitializeComponent() 被执行 之后 container.Add() 而这里

    public MyComponent(IContainer container) : this() {
        container.Add(this);
    }
    

    容器(Ad) 在之后执行 初始化组件()

        2
  •  0
  •   Konamiman    17 年前

    我相信这两者的调用顺序是不同的。我相信第二个方法,首先调用这个(),然后调用方法的内容。这意味着将在container.add之前调用InitializeComponent()。

    虽然这可能不会造成巨大的差异,但它仍然是一个差异。