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 变量,更新一些属性并查看更改。

那么这里发生了什么:将控件的引用传递给辅助方法使我能够更改其成员,即使不使用 ref 参数?

谢谢。

4

2 回答 2

6

你的最后一句话是绝对正确的。您正在传递对控件的引用;您可以通过引用更改该控件的内容,但如果您更改参数的值以完全引用不同的控件,则该更改不会传播到调用代码。

有关这个经常被误解的领域的更多详细信息,请参阅我关于参数传递的文章。

于 2010-03-25T20:43:52.690 回答
2

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

于 2010-03-25T20:46:52.153 回答