VB - 这个可疑实践的性能影响是什么?

时间:2011-08-29 20:05:25

标签: vb.net

我来自一个C#背景,所以我还不太适应我的VB 我在我们的代码库中经历过这种做法,并且从未用于链接 我想知道这会产生什么样的后果(如果有的话)。

Public Function Save(ByRef myObj As MyBusinessObject) As MyBusinessObject
    'Do save stuff
    'Return object we just saved
    Return myObj
End Function

'usage
myObject = Save(myObject)

2 个答案:

答案 0 :(得分:4)

  

我想知道这会产生什么样的后果(如果有的话)。

您正在为变量添加额外的赋值,但它实际上不会导致性能问题。它实际上只是做这个C#:

public MyBusinessObject Save(MyBusinessObject myObj)
{
     // Do save stuff
     return myObj;
}

然后致电:

myObj = Save(myObj);

这会重新设置变量引用,但会将其指向内存中的同一个对象,因此没有什么后果。但是,对于实例方法来说,它是相当标准的做法,因为它允许链接(你提到过),即:

myObj.Load(...).DoSomething().Save()

由于你没有链接,我怀疑这是由那些在调用方法时没有正确理解对象引用如何工作的人完成的。

答案 1 :(得分:0)

这种构造允许该方法可能返回与其开始的对象不同的对象。我不知道这对于“保存”方法是有用的,但它有时对于可能或可能不可变的对象是有用的,作为实现“写入时复制”语义的手段。例如,假设该类是某种类型的集合。如果执行“添加”的正确方法是说“myThing = myThing.Add(newItem)”,则显式未指定调用是否会变异并返回原始对象,或者是否将创建包含的新对象原始文件中的那些项目以及新项目,那么某些类实例可能被标记为共享不可变(在这种情况下,可以对同一实例具有许多语义上不同的引用),而其他类标记为unshared-mutable(在这种情况下,可以改变项目而不必复制它)。