将控件引用作为ref参数传递

时间:2010-03-25 20:39:47

标签: c# parameters ref

请帮助我,因为我有点困惑..我在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参数,因此在只读参考变量中不会浪费掉asignments。

当时没关系,但稍后,将整个表单作为参数进行练习我被编译器警告,并注意到这不能作为ref参数传递,因为它是只读的。好吧,我继续工作,看到即使没有ref关键字,我可以使用表单中的ref变量,更新一些属性,看看更改。

所以这里发生了什么:将控件的引用传递给helper方法使我能够在不使用ref参数的情况下更改其成员?

感谢。

2 个答案:

答案 0 :(得分:6)

你的最后陈述绝对正确。您将引用传递给控件;您可以通过引用更改该控件的内容,但如果您更改参数的值以完全引用其他控件,则该更改将不会传播到调用代码。

有关这个常被误解的区域的详细信息,请参阅my article on parameter passing

答案 1 :(得分:2)

您正在传递引用类型,因此无论您是否使用ref,都应该有相同的结果......