由于 operators 必须是 shared 并且参数通过 ByVal 传递,IsTrue(MyClass) 运算符会创建一个副本吗?该类包含一个数组。我希望能够做到这一点:
If myClass1 Then
...
但是没有 IsTrue 过程创建副本。
这实际上只是一个关于引用类型和值类型的问题。当您将变量作为实参传递给声明为
ByVal
的方法参数时,会生成该变量内容的副本。如果变量是值类型,则变量包含对象,因此对象被复制。如果变量是引用类型,则该变量包含对对象的引用,因此将复制引用而不是对象。如果您的类型是一个类,那么它就是一个引用类型,因此显然不会复制任何对象。很明显,每次使用运算符时都不会复制潜在的大对象。
这是基本的 .NET 编程。您应该花一些时间研究和学习值类型、引用类型、按值传递和按引用传递。