2010-03-25 249 views
0

請幫我在這裏,因爲我得到一種困惑..我有一個窗體在C#winforms項目和幾個方法,旨在執行這個特定的形式和所有的派生任務因此,其中一個輔助方法可以作爲示例..這個應該用數據集填充組合框。它的正常工作現在,但是當我用這個簽名作爲參考傳遞控制參考

protected void FillComboBox(kComboBox target, IEntClass_DA entity) 
     { 
      target.DataSource = entity.GetList().Tables[0]; 
      target.DisplayMember = "name"; 
      target.ValueMember = "id"; 
     } 

編碼方法,我看到將DisplayMember和ValueMember在組合框的方法調用後未持有的值。我只是認爲我應該使用ref參數,這樣不會浪費在只讀引用變量中。

到時候可以,但後來做了一個練習傳遞整個表單作爲參數,我被編譯器警告,注意這個參數不能作爲ref參數傳遞,因爲它是隻讀的。好吧,我繼續工作,看到即使沒有ref關鍵字,我可以使用表單中的ref變量,更新一些屬性並查看更改。

因此,這裏發生了什麼:將控件的引用傳遞給helper方法,即使不使用ref參數,也可以更改其成員。

謝謝。

+0

好,然後清除..順便提及類型時不需要ref參數。我認爲它可能以某種方式通過只讀引用。 非常感謝! – Enmanuel 2010-03-25 20:56:44

回答

6

您上次的陳述絕對正確。您將一個參考傳遞給控件;您可以通過引用更改該控件的內容,但是如果您更改該參數的值以完全引用其他控件,則該更改將不會傳播到調用代碼。

有關此常見誤解區域的更多詳細信息,請參閱my article on parameter passing

+0

您的網站在我們的網絡上被封鎖。你能在這裏詳細說明嗎? – 2015-02-12 14:27:35

+0

@softwareisfun:並非如此 - 嘗試http://jonskeet.uk/csharp/parameters.html(這是重定向到的內容)。 – 2015-02-12 14:31:58

2

您傳遞一個引用類型,所以應該有相同的結果是否使用REF或不...