为什么我的课堂上都有这两个构造函数?

为什么我的课堂上都有这两个构造函数?

问题描述:

在我的项目中,我看到我有两个构造函数。调试器只附加到第二个构造函数 - 为什么我有两个?为什么我的课堂上都有这两个构造函数?

public EventDialog() 
{ 
    // Required for Windows Form Designer support 
    InitializeComponent(); 

    m_timer.Interval = SystemInformation.DoubleClickTime; 
    m_timer.AutoReset = false; 
    m_timer.Elapsed +=new System.Timers.ElapsedEventHandler(TimerElapseCallback); 
} // Constructor 

public EventDialog(string[] list) 
{ 
    // Required for Windows Form Designer support 
    InitializeComponent(); 

    if(list != null) 
    { 
     foreach(string s in list) 
     { 
      if(s.Trim() != string.Empty) 
       m_leafComboBox.Items.Add(s.Trim()); 
     } 
    } 

    m_timer.Interval = SystemInformation.DoubleClickTime; 
    m_timer.AutoReset = false; 
    m_timer.Elapsed +=new System.Timers.ElapsedEventHandler(TimerElapseCallback); 
} 
+1

你的问题是什么? – Gabe 2011-03-24 04:18:06

+0

然后在代码中调用第二个构造函数 - 也就是找到代码实际上构造了一个EventDialog,它将使用第二个调试器进入该调试​​器的代码。如下所述,VS设计人员需要默认(无参数)构造函数。 – 2011-03-24 04:34:53

+0

您的声明“调试器仅通过第二个构造函数进行连接”尚不清楚。不确定你指的是什么。你得到什么错误? – 2011-03-24 04:58:15

的原因,只有第二个构造函数是附加的是,必须存在一个将值传递给构造函数的调用,第二个构造函数不会调用无参数构造函数。如果你定义了一个带参数的构造函数,它将是唯一被接受的构造函数。即,一个无参数的构造函数将不再存在于类中。但是,如果要继续允许其他代码使用无参数构造函数实例化类,并且您想要带有参数的构造函数,则必须声明两者。

无参数的构造函数(第一个),否则Visual Studio的设计师将不能创建这个类的一个实例是必要的(我想这是一个Form类),以显示在用户界面设计师。

第二个构造函数最有可能由开发人员在从代码手动创建对话框时传递一些额外的参数。

BTW我最好是写这样的:

公共EventDialog(字符串[]列表):这个(){ ... }

+1

调用默认的构造函数使用这不是技术上正确的,因为额外的代码在默认构造函数中的代码之间插入。在这种情况下,看起来它不会创建一个错误,但这不是一般情况下的情况......只有当其他代码会在默认构造函数中的所有语句之下。 – 2011-03-24 04:32:49

 // 
    // Required for Windows Form Designer support 
    // 

只有第一个构造函数中的注释是正确的。您不能设计没有默认构造函数的表单。让它看起来更像这样:

public EventDialog(string[] list) : this() 
    { 
    if (list != null) 
    { 
     // etc.. 
    } 
    } 

注意添加this()来调用默认构造函数。您现在只需添加特殊的构造函数代码。

+0

那么你的意思只有一个构造函数就足够了? – peter 2011-03-24 04:27:01

+0

只有第一个*评论*是正确的。从第二个构造函数中删除它。 – 2011-03-24 04:31:44

+0

现在感谢了 – peter 2011-03-24 04:39:33