【问题标题】:Passing control references as ref parameters将控件引用作为 ref 参数传递
【发布时间】:2011-01-31 22:18:12
【问题描述】:

请在这里帮助我,因为我有点困惑。我在 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 参数??

谢谢。

【问题讨论】:

  • 好的,那么清楚.. 传递引用类型时不需要 ref 参数。我认为它可能会以某种方式传递只读引用。非常感谢!!

标签: c# parameters ref


【解决方案1】:

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

请参阅my article on parameter passing,了解有关此常见误解领域的更多详细信息。

【讨论】:

  • 您的网站在我们的网络上被阻止。你能在这里详细说明一下吗?
  • @softwareisfun:不是真的 - 试试jonskeet.uk/csharp/parameters.html(这是重定向到的)。
【解决方案2】:

你传递的是一个引用类型,所以无论你是否使用 ref 都应该有相同的结果...

【讨论】:

    猜你喜欢
    • 2021-12-14
    • 2018-01-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-11-16
    • 1970-01-01
    • 1970-01-01
    • 2015-11-20
    相关资源
    最近更新 更多