0

可能重复:
VB.Net 中的引用

我想传递一个中等大小的客户数据库对象,但我不想按值传递它,因为我认为这是不必要的。

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

4

2 回答 2

3

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

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

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

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

阅读我关于C# 参数传递的文章——在 VB 中也差不多。

于 2013-01-30T20:43:47.143 回答
1

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

如果您通过引用传递一个类,那么该方法可能会更改引用(指针)并且它将反映在调用方法中。

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

于 2013-01-30T20:42:21.387 回答