2011-08-29 36 views
3

我来自C#的背景,所以我还没有完全嗅到我的VB。
我在我们的代码库中遍历了这个练习,它是从未用于链接
我想知道这会产生什么样的性能后果(如果有的话)。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) 

回答

4

我想知道,这可能会造成什么后果性能(如果有的话)。

您正在为变量添加一个额外的任务,但这并不会导致性能问题。它有效地只是在做这个C#:

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

,然后调用:

myObj = Save(myObj); 

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

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

如果你还没有链接,我怀疑这是由人谁不正确理解做调用方法时对象引用是如何工作的。

0

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

相关问题