2011-10-26 69 views
3

我有一个重载构造函数的类。我想对代码进行重新分解,以便对构造函数的一种形式的调用将参数转换为另一种构造函数接受的格式,然后调用它。如何在同一对象的构造函数中调用不同的构造函数?

这里是我目前拥有的三个构造函数的代码:

/// <summary> 
/// Original Constructor accepting a single dataset 
/// </summary> 
/// <param name="theData"> The dataset containing the tables to be displayed</param>  
public DataForm(System.Data.DataSet theData) 
{ 
    InitializeComponent(); 

    // Ensure a DataSets has been passed for display 
    if (theData != null) 
    { 
     // Create a new list and add the single dataset to it 
     List<DataSet> tempDataList = new List<DataSet>(); 
     tempDataList.Add(theData); 

     // Assign the list of datasets to the member variable 
     this.m_DSList = tempDataList; 
    } 

    CreateTabPages(); 
} 

/// <summary> 
/// Construct the form with tab pages assigned for each dataset 
/// </summary> 
/// <param name="DataArray">A collection of datasets, each to be displayed on their own tab page</param> 
public DataForm(DataSet[] DataArray) 
{ 
    InitializeComponent(); 

    // Ensure some DataSets have been passed for display 
    if (DataArray != null && DataArray.Length > 0) 
    { 
     // Assign the list of datasets to teh member variable 
     this.m_DSList = new List<DataSet>(DataArray); 
    } 

    CreateTabPages(); 
} 

/// <summary> 
/// Construct the form with tab pages assigned for each dataset 
/// </summary> 
/// <param name="DataList">A collection of datasets, each displayed on their own tab page</param> 
public DataForm(List<System.Data.DataSet> DataList) 
{ 
    InitializeComponent(); 

    // Assign the list of datasets to teh member variable 
    this.m_DSList = DataList; 

    CreateTabPages(); 
} 

正如你可以看到有重复代码的前两个构造函数,因此重新分解。

我知道我可以有一个确实的对象初始化的方法和调用这个从每个构造函数,但是这似乎并不很优雅。

任何人都可以点我在正确的方向? 谢谢。

+0

你要离开'm_DSList'未初始化(或任何它被宣布为)如果前两个构造函数接收空? – BoltClock

+0

** CreateTabPages()**方法将处理m_DSList为空,但很好,你发现它。我会相应地评论我的代码。 – TeamWild

回答

6

试试这个

public DataForm(System.Data.DataSet theData): this(new List<System.Data.DataSet>{theData}){} 

public DataForm(DataSet[] DataArray): this(DataArray.ToList()){} 

public DataForm(List<System.Data.DataSet> DataList) 
{ 
    InitializeComponent(); 

    // Assign the list of datasets to teh member variable 
    this.m_DSList = DataList; 

    CreateTabPages(); 
} 
+1

如果前两个构造函数的参数为​​空,该怎么办? – BoltClock

+0

您可以检查第三个构造函数列表是否为空或包含空元素。但最好的解决方案是在创建之前验证这些参数 – Stecya

+0

+1。 ,是的,这是很简单的添加喜欢的东西,这'(于DataArray = NULL DataArray.ToList():?新的List(System.Data.DataSet中>())' –

0
public DataForm() 
     { 
      InitializeComponent(); 
     } 
     public DataForm(DataSet theData): this() 
     { 
      this.m_DSList= (theData!=null) ? new List<DataSet>{theData}:null; 
     } 
     public DataForm(DataSet[] DataArray):this() 
     { 
      this.m_DSList= (DataArray!=null && DataArray.Length > 0) ? new List<DataSet>(DataArray):null; 
     } 
     public DataForm(List<DataSet> DataList):this() 
     {   
      this.m_DSList = DataList; 
     } 
     //Take this method out from constructor and for a better design but not mandatory 
     public void CreateTabPages() 
     { 
     } 
相关问题