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