sono normalmente aC# programmatore, ma ora sto lavorando in VB per questo progetto quando ho utilizzato per impostare una classe Singleton avrei seguito il modello Jon Skeetpattern Singleton in VB
public sealed class Singleton
{
static Singleton instance = null;
static readonly object padlock = new object();
Singleton()
{
}
public static Singleton Instance
{
get
{
lock (padlock)
{
if (instance == null)
{
instance = new Singleton();
}
return instance;
}
}
}
//Added to illistrate the point
public static void a()
{
}
public void b()
{
}
}
o uno dei variazioni ora se scrivo la dichiarazione in C#
Singleton.Instance. Quali procedure sono tutti i membri che non sono statici, b ma non a.
Ora, quando faccio lo stesso in VB
Private Shared _instance As StackTracker
Private Shared ReadOnly _lock As Object = New Object()
Private Sub New()
_WorkingStack = New Stack(Of MethodObject)
_HistoryStack = New Queue(Of MethodObject)
End Sub
Public Shared ReadOnly Property Instance() As StackTracker
Get
SyncLock _lock
If (_instance Is Nothing) Then
_instance = New StackTracker()
End If
End SyncLock
Return _instance
End Get
End Property
ho StackTracker.Instance.Instance e continua ad andare, mentre non è la fine del mondo sembra male.
Domanda c'è un modo in VB per nascondere la seconda istanza in modo che l'utente non possa ricorsivamente chiamare Instance?
sembra molto simile alla seconda versione: semplice thread-safety, non utilizza 4.0 effettivamente utilizzando la destinazione 2.0 con IDE 2008. – Mike