实现和调用 IsTrue 运算符是否创建类实例的副本

问题描述 投票:0回答:1

由于 operators 必须是 shared 并且参数通过 ByVal 传递,IsTrue(MyClass) 运算符会创建一个副本吗?该类包含一个数组。我希望能够做到这一点:

If myClass1 Then
...

但是没有 IsTrue 过程创建副本。

vb.net operator-overloading
1个回答
0
投票

这实际上只是一个关于引用类型和值类型的问题。当您将变量作为实参传递给声明为

ByVal
的方法参数时,会生成该变量内容的副本。如果变量是值类型,则变量包含对象,因此对象被复制。如果变量是引用类型,则该变量包含对对象的引用,因此将复制引用而不是对象。如果您的类型是一个类,那么它就是一个引用类型,因此显然不会复制任何对象。很明显,每次使用运算符时都不会复制潜在的大对象。

这是基本的 .NET 编程。您应该花一些时间研究和学习值类型、引用类型、按值传递和按引用传递。

© www.soinside.com 2019 - 2024. All rights reserved.