2010-03-25 150 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或不...