2011-03-24 81 views
0

在我的項目中,我看到我有兩個構造函數。調試器只附加到第二個構造函數 - 爲什麼我有兩個?爲什麼我的課堂上都有這兩個構造函數?

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

回答

0

的原因,只有第二個構造函數是附加的是,必須存在一個將值傳遞給構造函數的調用,第二個構造函數不會調用無參數構造函數。如果你定義了一個帶參數的構造函數,它將是唯一被接受的構造函數。即,一個無參數的構造函數將不再存在於類中。但是,如果要繼續允許其他代碼使用無參數構造函數實例化類,並且您想要帶有參數的構造函數,則必須聲明兩者。

2

無參數的構造函數(第一個),否則Visual Studio的設計師將不能創建這個類的一個實例是必要的(我想這是一個Form類),以顯示在用戶界面設計師。

第二個構造函數最有可能由開發人員在從代碼手動創建對話框時傳遞一些額外的參數。

BTW我最好是寫這樣的:

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

+1

調用默認的構造函數使用這不是技術上正確的,因爲額外的代碼在默認構造函數中的代碼之間插入。在這種情況下,看起來它不會創建一個錯誤,但這不是一般情況下的情況......只有當其他代碼會在默認構造函數中的所有語句之下。 – 2011-03-24 04:32:49

3
 // 
    // 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

相關問題