【问题标题】:Passing a const parameter by reference in vb.net [duplicate]在vb.net中通过引用传递const参数[重复]
【发布时间】:2013-01-14 19:36:47
【问题描述】:

可能重复:
References in VB.Net

我想传递一个中等大小的 Customer db 对象,但我不想按值传递它,因为我认为这是不必要的。

在 C++ 中,当你有一个大对象时,通过值传递它是低效的,因为从它创建了一个副本,所以你通过引用传递它,因此没有创建(传递的对象的)副本。我曾经将参数作为常量传递,因为这样如果我尝试更改函数内部的对象,编译器不会让我这样做,这样我就不会损害传递的对象(因为它是通过引用传递的)。是否可以在 vb.net 中模仿这一点还是不需要?

【问题讨论】:

    标签: c++ .net vb.net


    【解决方案1】:

    我强烈怀疑您对如何在 VB 中传递值感到困惑。

    如果您的 CustomerDb 类型是一个,那么该类型的每个表达式都将具有一个已经是引用的值。默认情况下,该引用将按值传递 - 但它仍然只是传递的 reference,而不是整个对象。

    如果您的 CustomerDb 类型是一个 结构,那么您确实每次都会传递整个值 - 而且您应该强烈考虑将其更改为一个类...

    当然,当您通过值传递引用时,这并不会阻止对象在方法被修改,但这确实意味着对参数变量本身的更改不会被反映在调用代码中。

    阅读我在 C# parameter passing 上的文章 - 在 VB 中几乎相同。

    【讨论】:

    • 谢谢。我想我会投票决定将其作为重复项关闭。
    • 我喜欢您对“C# 深度”中参数传递的深入解释:)
    • 虽然参数变量本身仍然指向同一个对象,但该对象在方法内的内部状态的变化将反映在调用代码中。
    • @DaveDoknjas:确实。这就是第三段的意思——这篇文章更详细。
    • 只是为询问的人澄清一下 - 我知道你已经解决了这个问题。 (顺便说一句,这篇文章很棒)。
    【解决方案2】:

    在 .NET 中,类(我假设 Customer 是)是引用类型。将引用类型作为参数传递会将引用(指针)传递给对象。所以传递一个类是非常有效的,并且不会创建副本。

    如果你通过引用传递一个类,那么方法可以改变引用(指针),它会反映在调用方法中。

    我不知道是否有一种简单的方法可以使参数只读。由于引用类型确实传递了引用,因此对对象的任何更改都将反映在原始对象中。如果您不想修改原件,您可能需要一份副本。

    【讨论】:

    • 谢谢。我想我会投票决定将其作为副本关闭
    猜你喜欢
    • 2018-05-26
    • 2017-03-21
    • 2013-05-16
    • 2013-01-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-31
    相关资源
    最近更新 更多