2011-08-29 41 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(在這種情況下,人們可以在不需要複製的情況下改變項目)。

相關問題