在 vb.net 中通过引用传递 const 参数
Passing a const parameter by reference in vb.net
可能的重复项:
VB.Net 中的参考文献
我想传递一个中型客户数据库对象,但我不想按值传递它,因为我认为这是不必要的。
在 c++ 中,当你有一个大对象时,按值传递它是低效的,因为副本是从它创建的,所以你通过引用传递它,这样就不会创建(传递的对象)的副本。我曾经将参数作为常量传递,因为这样如果我尝试更改函数中的对象,编译器就不会允许我这样做,这样我就不会伤害传递的对象(因为它是通过引用传递的)。是否可以在 vb.net 中模仿这一点,还是不需要?
我强烈怀疑您对如何在 VB 中传递值感到困惑。
如果您的 CustomerDb 类型是一个类,则该类型的每个表达式都将有一个已经是引用的值。默认情况下,该引用将按值传递 - 但它仍然只是传递的引用,而不是整个对象。
如果您的 CustomerDb 类型是一个结构,那么您每次都会传递整个值 - 无论如何,您应该强烈考虑将其更改为类......
当然,当您按值传递引用时,这不会阻止对象在方法中被修改,但这确实意味着对参数变量本身的更改不会反映在调用代码中。
阅读我关于 C# 参数传递的文章 - 它在 VB 中大致相同。
在 .NET 中,类(我假设Customer
)是引用类型。将引用类型作为参数传递会将引用(指针)传递给对象。因此,传递类非常有效,并且不会创建副本。
如果通过引用传递类,则该方法可以更改引用(指针),并且它将反映在调用方法中。
我不知道是否有一种简单的方法可以使论点只读。由于引用类型确实传递了引用,因此对对象所做的任何更改都将反映在原始对象中。如果您不希望修改原件,则可能需要副本。
相关文章:
- 不允许运算符 const 参数调用 const 成员函数
- std::p ackaged_task 应该删除带有 const 参数的复制 c'tor
- 将非 const 对象用于 const 参数
- 对可变参数模板使用 const 参数
- 为什么 QObject::d isconnect(const QMetaObject::Connection &connection) 采用 const 参数并打算修改它?
- 为什么static_assert在带有 const 参数的成员函数中不起作用?
- 如何使用 QString::replace on const& 参数?
- 将const char * const参数成员分配给新值
- 默认移动构造函数采用 const 参数
- 模板参数包无法推断"const&"参数
- const参数与const引用参数
- 重载解析不正确,const 参数的值为 0
- 无法将带有 const 参数的函数转换为函数指针?
- const参数与C 模板中的非const参考结合
- 该函数更改成员函数的const参数
- 重载比较运算符 C++,如何与 const 参数进行比较
- 为什么 const 数组优先绑定到 const T& 参数而不是 T&& 参数?
- const参数的类的只读版本
- 为什么这个 const 参数不能与非类型模板参数匹配?
- 没有匹配函数调用具有 const 参数的模板化函数