问题:
我有一个类,其中有一个事件日志,该日志记录该类的特定实例,并记录到共享的事件日志中,并跟踪所有实例的更改。
我的问题是我希望日志的条目数可调整大小,并且我需要确保共享日志的大小永远不小于任何实例日志的大小。可以检查吗?
我尝试过的事情:
我已经了解了很多有关GetType和反射的信息,并且已经能够获取实例名称,但是我不知道如何在这些实例中引用数据。
下面是我所在位置的伪代码。
Public Class Test
Public InstancedLog As DataSet
Public Shared SharedLog As DataSet
Public Shared Sub ResizeSharedLog(ByRef DesiredSize As Integer)
If DesiredSize < ("check and sum up the size of all instances of InstancedLog") Then
'can't resize, too small.
Else
'resize to DesiredSize.
End If
End Sub
End Class
任何帮助将不胜感激。
答案 0 :(得分:0)
这是一个跟踪其自身实例的类的示例:
Public Class Class1
Implements IDisposable
Private Shared instances As New List(Of Class1)
Public Sub New()
instances.Add(Me)
End Sub
Public Shared Sub TouchEveryInstance()
For Each instance As Class1 In instances
'Use instance here.
Next
End Sub
#Region "IDisposable Support"
Private disposedValue As Boolean ' To detect redundant calls
' IDisposable
Protected Overridable Sub Dispose(disposing As Boolean)
If Not disposedValue Then
If disposing Then
' TODO: dispose managed state (managed objects).
instances.Remove(Me)
End If
' TODO: free unmanaged resources (unmanaged objects) and override Finalize() below.
' TODO: set large fields to null.
End If
disposedValue = True
End Sub
' TODO: override Finalize() only if Dispose(disposing As Boolean) above has code to free unmanaged resources.
'Protected Overrides Sub Finalize()
' ' Do not change this code. Put cleanup code in Dispose(disposing As Boolean) above.
' Dispose(False)
' MyBase.Finalize()
'End Sub
' This code added by Visual Basic to correctly implement the disposable pattern.
Public Sub Dispose() Implements IDisposable.Dispose
' Do not change this code. Put cleanup code in Dispose(disposing As Boolean) above.
Dispose(True)
' TODO: uncomment the following line if Finalize() is overridden above.
' GC.SuppressFinalize(Me)
End Sub
#End Region
End Class
当您添加Implements IDisposable
行时,大多数代码都是由VS自动生成的。除引用instances
字段的行外,整个区域都是自动添加的。我添加了instances
字段,构造函数和TouchEveryInstance
方法。