Один из моих младших программистов создал синглтон, но он действует странно:Почему это однопользовательское поведение происходит?
Я знаю, что вы не должны обращаться к объекту, подобному этому, но вот как они это сделали, и я не могу объяснить, почему это возникающий - после вызова экземпляра delete я помещаю точку останова в строку после, и я все еще могу получить доступ к объекту someObject и его свойствам. Такой подход имеет смысл, поскольку ваш доступ к ссылке объекта mySingleton, а не myInstance, ... как вы можете видеть, я не могу объяснить это ясно, может ли кто-нибудь помочь?
например.
Dim x As MySingleton = MySingleton.GetInstance()
x.someObject.int = 5
x.someObject.str = "hello"
Console.Out.WriteLine(x.someObject.int.ToString)
Console.Out.WriteLine(x.someObject.str.ToString)
MySingleton.RemoveInstance()
Console.Out.WriteLine(x.someObject.int.ToString) //still exists!
Console.Out.WriteLine(x.someObject.str.ToString) //still exists!
Вот псевдопользователей код для одноточечного:
Public Class MySingleton
Private Shared _myInstance As MySingleton
Public someObject As New Class1
Public Shared Function GetInstance() As MySingleton
If _myInstance Is Nothing Then
_myInstance = New MySingleton
End If
Return _myInstance
End Function
Public Shared Sub RemoveInstance()
_myInstance = Nothing
End Sub
End Class
Лично я не пишу одиночек, как это - у меня есть экземпляр объекта в качестве отдельного класса. но каждый по своему усмотрению.
Важный момент: что '_myInstance' использование * не * одноэлементно, а не поточно-. В частности, если это ASP.NET (или любая другая высокопоточная среда), у вас будет хаос. –
Я забыл упомянуть - я ожидал бы исключение null ref после вызова экземпляра delete ... –
@Marc - да, я знаю, я упростил код –