可能重复:
References in VB.Net
我想传递一个中等大小的Customer数据库对象,但我不想按值传递它,因为我认为这是不必要的。
在c ++中,当你有一个大对象时,按值传递它是低效的,因为从它创建了一个副本,所以你通过引用传递它,这样就没有创建任何副本(传递的对象)。我曾经把参数作为常量传递,因为如果我试图更改函数内部的对象,编译器就不会让我这样我不会损坏传递的对象(因为它是通过引用传递的)。是否有可能在vb.net中模仿这个或者不需要它?
答案 0 :(得分:3)
我强烈怀疑你对于如何在VB中传递值感到困惑。
如果您的CustomerDb类型是类,那么该类型的每个表达式都将具有一个已经作为引用的值。默认情况下,该引用将按值传递 - 但它仍然只传递引用,而不是整个对象。
如果您的CustomerDb类型是结构,那么您每次都会传递整个值 - 而且您应该强烈考虑将其更改为类...
当然,当你通过值传递引用时,这并不会阻止对象在方法中被修改,但它确实意味着对参数变量本身的更改没有反映出来在调用代码中。
阅读我在C# parameter passing上的文章 - 它在VB中大致相同。
答案 1 :(得分:1)
在.NET中,类(我假设Customer
是)是引用类型。将引用类型作为参数传递将传递引用(指针)到对象。所以传递一个类是非常有效的,不会创建副本。
如果通过引用传递一个类,那么该方法可以更改引用(指针),它将反映在调用方法中。
如果有一种简单的方法可以让参数只读,我就不知道了。由于引用类型确实传递了引用,因此对对象的任何更改都将反映在原始对象中。如果您不想修改原件,可能需要一份副本。