为什么我班上都有这两个构造函数?

时间:2011-03-24 04:14:30

标签: c#

在我的项目中,我看到我有两个构造函数。调试器只附加到第二个构造函数 - 为什么我同时使用它们?

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

3 个答案:

答案 0 :(得分:3)

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

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

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

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

答案 1 :(得分:2)

无参数构造函数(第一个)是必需的,否则Visual Studio设计器将无法在UI设计器中创建此类的实例(我想这是一个Form类)。

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

BTW我最好这样写:

public EventDialog(string [] list):this() { ... }

答案 2 :(得分:0)

仅附加第二个构造函数的原因是必须存在将值传递给构造函数的调用,而第二个构造函数不会调用无参数构造函数。如果使用参数定义构造函数,它将是唯一被接受的构造函数。也就是说,类中不再存在无参数构造函数。但是,如果您想继续允许其他代码使用无参数构造函数实例化该类,并且您想要一个带参数的构造函数,则必须同时声明它们。