是Shared
是VB.NET中的一種範圍或數據類型?什麼時候需要在VB.NET中的類,函數或子類之前使用Shared
字?例如,你爲什麼會把Shared
在Main
方法的前面,就像這樣:關鍵字'共享'在VB.NET中是什麼意思?
Public Shared Sub Main()
' ...
End Sub
是Shared
是VB.NET中的一種範圍或數據類型?什麼時候需要在VB.NET中的類,函數或子類之前使用Shared
字?例如,你爲什麼會把Shared
在Main
方法的前面,就像這樣:關鍵字'共享'在VB.NET中是什麼意思?
Public Shared Sub Main()
' ...
End Sub
的Shared
修改在VB.NET是一樣的在C#中static
修改。它既不是範圍(因爲它可以是Private
或Public
)也不是數據類型。按照MSDN:
指定一個或多個聲明編程元素在逃類或結構相關,而不是與類或結構的具體實例。
對於函數和子類,它表示函數或子類屬於類本身,而不屬於該類的實例。例如,String.IsNullOrEmpty
引用共享方法,而myString.TrimEnd()
引用實例(非共享)方法。
在C#中,您可以創建一個靜態類,這意味着所有成員都是靜態的。這在VB中不被支持(至少不是根據this documentation)。 VB中的模塊與C#中靜態類的用途非常相似。
只有當方法需要爲靜態(共享)時,我才能想到的是當另一個靜態成員引用它時。否則,它們對於某些場景非常有用,例如特定方法或屬性不需要保留或訪問任何特定於實例的狀態,但通常不是必需的。
共享主沒有意義(如果你建立一個控制檯應用程序)
下面是共享一個例子:在主
Class WithShared
Shared Sub A_Method()
End Sub
End Class
Class WithoutShared
Sub A_Method()
End Sub
End Class
現在可以代碼:
Dim WithSharedInstance as New WithShared()
WithSharedInstance.A_Method() 'does not work
WithShared.A_Method() 'works
Dim WithoutSharedInstance as New WithShared()
WithoutSharedInstance.A_Method() 'works
WithoutShared.A_Method() 'does not work
所以如果一個調用不依賴於一個特定的實例,那麼使用Shared。由於您通過classdefinition調用共享方法,因此無法訪問變量和方法,這些變量和方法僅在實例化該類時才存在。
Dim WithoutSharedInstance as New WithShared()應該更改爲Dim WithoutSharedInstance作爲New WithoutShared()。 – dybzon 2017-09-18 07:50:06
看看這一個好方法是通過例如:
Dim firstName as String = "Bob"
Dim lastName as String = "Jones"
Dim fullName as String = String.Format("{0} {1}", firstName, lastName.ToUpper())
如果你創建String.ToUpper()和的String.Format()函數,你需要作用於一個功能區分一個類的實例和一個沒有的類。
如果你正在寫一類像String
:
.Format()
將宣佈共享,因爲它並不需要一個對象。
.ToUpper()
不會因爲它需要一個對象實例。它返回的值與對象有關。
我總是避免在整個類之前使用'shared'關鍵字,而是將其聲明爲模塊。[This question](http:// stackoverflow。com/questions/881570/classes-vs-modules-in-vb-net)如果你好奇的話,可以進一步深入其中。但我認爲這是個人偏好。 – 2013-04-08 20:41:38