1
快速問題:如果我有一個非常大的函數/子類是一個實例方法(即不是Shared
),我得到或失去任何東西通過將其移動到共享方法,然後聲明一個小的存根方法實例使用?移動一個大的實例方法來共享,並創建一個實例存根 - 好主意?
即,我從這個去:
Public Sub MyBigMethod(ByVal Foobar As String)
If String.IsNullOrWhitespace(Foobar) Then
Throw New ArgumentNullException("Foobar")
End If
' Lots and lots of ugly code.
' Really. There is lots of ugly code here.
'
' Lorem ipsum dolor sit amet, consectetur adipiscing
' elit. Aliquam vel erat sit amet massa ultricies
' adipiscing. Mauris eu est ligula, a pharetra lorem.
End Sub
這樣:
Private Shared Sub MyBigMethod(ByVal Obj as MyObj, ByVal Foobar As String)
' Lots and lots of ugly code.
' Really. There is lots of ugly code here.
'
' Lorem ipsum dolor sit amet, consectetur adipiscing
' elit. Aliquam vel erat sit amet massa ultricies
' adipiscing. Mauris eu est ligula, a pharetra lorem.
End Sub
Public Sub MyBigMethod(ByVal Foobar As String)
If String.IsNullOrWhitespace(Foobar) Then
Throw New ArgumentNullException("Foobar")
End If
Call MyClass.MyBigMethod(Me, Foobar)
End Sub
我的想法是我的內存大小保存每個對象的每個實例。因爲每個實例只需要處理調用共享版本的stub方法,並將其自身的實例傳遞給共享方法,以便它可以執行任何需要的操作。但我敢打賭,由於額外的函數調用開銷,我犧牲了非常多的速度。
對不起?
聽起來有點像中斷處理程序如何在CPU級別工作。它只是保存剛剛中斷的線程狀態,然後在返回之前恢復它們。所以如果我的假設是錯誤的,那麼通過將一個大功能作爲一個共享方法,沒有任何東西可以獲得? – Kumba 2011-06-05 06:06:11
@ hamlin11:Re,第三段:共享方法對類有什麼好處?僅適用於處理不需要直接對類的實例變量進行操作的實用程序方法的情況? – Kumba 2011-06-05 06:09:17
實際上,共享方法會導致一些線程安全問題。就CPU而言,共享和實例方法之間沒有區別。這只是彙編語言指令。在將程序提交到程序集之前,編譯器確定誰可以訪問這些指令。 – 2011-06-05 06:11:46