【问题标题】:Const vs. Static in a switch statement [duplicate]switch语句中的常量与静态[重复]
【发布时间】:2015-12-18 17:22:17
【问题描述】:

我正在将一些旧的 VB.NET 转换为 C#。我遇到的更小的问题之一是如何处理将大对象传递给方法。在 VB 中,我们会使用 ByRef 关键字,如下所示:

    Friend Sub New(ByRef Parent As WorkSheet)
        'INITIALIZE OBJECT
        Me.WS = Parent
        pColorId = 64
        pZoomScale = 100
    End Sub

但在 C# 中,有一长串限制使这成为不可能。例如,refs 不能有默认值,不能传入常量、null 或 this,因为它们是只读的。

有没有简单的解决方案?还是您只是忽略它并在没有限定符的情况下传递所有内容并且编译器只是做正确的事情?

【问题讨论】:

  • 请出示正文。
  • 大约 600 行。有什么特别需要的吗?
  • @MauryMarkowitz 你真的知道ByRef 是什么意思吗?如果你想为它分配一个在函数外也可见的值,你只需要传递 ByRef
  • 也许可以展示这些参数是如何使用的
  • 你不需要传递对象为ref,所有的类都是引用类型,不需要传递ref

标签: c# pass-by-reference


【解决方案1】:

您不需要通过 ref 传递对象,所有类都是引用类型,在您的情况下不需要通过 ref 传递。

Passing Reference Type Variables

引用类型的变量不直接包含它的数据;它 包含对其数据的引用。当您传递引用类型时 通过值参数,可以更改指向的数据 引用,例如类成员的值。


不要将通过引用传递的概念与 引用类型。这两个概念并不相同。方法参数 可以被 ref 修改,不管是值类型还是 参考类型。传递时没有值类型的装箱 参考。

【讨论】:

    【解决方案2】:

    在 C# 中,对派生自 object 的类的所有引用都将复制到方法中。当您将对象引用传递给方法时,您对传入的实际对象进行操作。

    您引用的 ref 关键字是对引用的引用,只有在您打算更改传入的引用本身时才需要使用它(在您的示例中,您需要 ref如果您打算将 Parent 设置为 null,并希望将其应用于方法之外)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-06-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多