在C#中优化构造函数重载

时间:2017-07-26 14:50:53

标签: c# constructor constructor-overloading

我有一个带有以下构造函数的Winforms应用程序:

public Form1()
{
  InitializeComponent();
 //Code that enables/disables buttons etc
}

public Form1(int ID)
{
  searchByID = ID;
  InitializeComponent();
 //Code that enables/disables buttons etc
}

哪一个被选中?这取决于程序是否由具有附加参数的CMD启动。这是检查:

的主要内容
static void Main(string[] args)
{
            //Args will be the ID passed by a CMD-startprocess (if it's started by cmd of course

            if (args.Length == 0)
            {
                Application.Run(new Form1());
            }
            else if(args.Length>0)
            {
                string resultString = Regex.Match(args[0], @"\d+").Value;
                incidentID = Int32.Parse(resultString);
                try
                {
                    Application.Run(new Form1(incidentID));
                }
                catch (Exception e)
                {
                    MessageBox.Show(e.ToString());

                }
            }
}

我的问题是:

如何优化构造函数?它们都包含大约30行和相同代码一样好的内容,我想通过这样做来解决这个问题:

  public Form1()
    {
        Form1(0)
    }


 public Form1(int ID)
 {
       if (ID>0)
    {
       //it has an ID
    }else
    {
       doesn't have an ID
    }
 }

但这给了我错误:

  

非可调用成员不能像方法一样使用。

如何优化此功能?

1 个答案:

答案 0 :(得分:2)

您需要做的是:

public Form1() : this(0)
{
}

public Form1(int ID)
{
    if (ID>0)
    {
        //it has an ID
    }
    else
    {
        //doesn't have an ID
    }
}

这称为链接构造函数 - 所以: this(0)表示“在此构造函数中运行代码之前,调用另一个并将”0“作为参数传递”