InitializeComponent 在两个构造函数中,还是在一个构造函数继承中?

Posted

技术标签:

【中文标题】InitializeComponent 在两个构造函数中,还是在一个构造函数继承中?【英文标题】:InitializeComponent in both constructors, or in one with constructor inheritance? 【发布时间】:2010-10-07 05:01:09 【问题描述】:

在对组件模型的影响方面是否存在任何实际差异:

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);
    

如果不是,为什么 Microsoft 选择第一种方法用于他们的设计器生成的代码?

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

【问题讨论】:

【参考方案1】:

执行顺序不同。在

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

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

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

container.Add()InitializeComponent()之后执行

【讨论】:

但这对组件模型的影响有什么不同吗?我可能应该更清楚这一点。【参考方案2】:

我相信两者的调用顺序会有所不同。我相信第二种,首先调用this(),然后调用方法的内容。这意味着 InitializeComponent() 将在 container.Add 之前被调用。

虽然这可能不会有很大的不同,但它仍然是不同的。

【讨论】:

以上是关于InitializeComponent 在两个构造函数中,还是在一个构造函数继承中?的主要内容,如果未能解决你的问题,请参考以下文章

vb.net求大神解释

在Xamarin Forms Project中的OnAppearing方法中调用InitializeComponent

InitializeComponent() 有啥作用,它在 WPF 中如何工作?

BlankPage构造函数无法初始化组件

C# winform 多form传递数据问题

C#父子窗体怎么弄