Tôi thường aC# lập trình viên nhưng bây giờ đang làm việc trong VB cho một dự án này khi tôi sử dụng để thiết lập một lớp singleton tôi sẽ làm theo mô hình Jon SkeetSingleton pattern trong 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()
{
}
}
hoặc một trong các các biến thể ngay bây giờ nếu tôi viết tuyên bố trong C#
Singleton.Instance. Thủ tục là tất cả các thành viên không tĩnh, b nhưng không phải là a.
Bây giờ khi tôi làm như vậy trong 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
tôi nhận được StackTracker.Instance.Instance và nó tiếp tục đi, trong khi nó không phải là sự kết thúc của thế giới có vẻ xấu.
Câu hỏi là có cách nào trong VB để ẩn dụ thứ hai để người dùng không thể đệ quy gọi Instance?
có vẻ như phiên bản thứ hai - an toàn chủ đề đơn giản, không sử dụng 4.0 thực sự sử dụng mục tiêu 2.0 với IDE 2008. – Mike