所以这就是我设计我的Lazy类的方法(来自this SO):
Public NotInheritable Class MySingleton
Private Shared ReadOnly _instance As New Lazy(Of MySingleton)(Function() New _
MySingleton(), System.Threading.LazyThreadSafetyMode.ExecutionAndPublication)
Private Sub New()
End Sub
Public Shared ReadOnly Property Instance() As MySingleton
Get
Return _instance.Value
End Get
End Property
Private _MyString As String
Public Property MyString As String
Get
Return _MyString
End Get
Set(value As String)
_MyString = value
End Set
End Property
End Class
要访问_MyString值,请执行以下操作:
Dim MyString = MySingleton.Instance.MyString
事实上,我总是要键入“.Instance”。 如果我按以下方式设计属性,它是否有任何不利之处:
Public Property MyString As String
Get
Return instance._MyString
End Get
Set(value As String)
instance._MyString = value
End Set
End Property
所以我可以在不写“.Instance。”的情况下访问它。
Dim MyString = MySingleton.MyString
答案 0 :(得分:1)
是的,您可以(当然使用Public Shared Property
),但是您正在失去单例而非静态类的一些好处。
假设你有另一个班级MyWorker
Public Class MyWorker
Public Sub Work(instance as MySingleton)
Dim value as String = instance.MyString
' Do something ...
End Sub
End Class
我不会这样做。这可能看起来不是一个大问题,但从长远来看,你的代码库中存在紧密耦合,并且很难模拟你的类进行单元测试,这是首先在静态类上使用singeltons的原因之一。 / p>
在多次访问Singelton值时,我经常使用这种方法:
Dim instance as MySingelton = MySingelton.Value
If instance.MyString = "something" Then
instance.MyString = "something else"
End If
更干净的方法。