您可以从类的共享函数中获取/更改对象的所有实例的数据吗?

时间:2018-12-31 21:24:50

标签: vb.net

问题:

我有一个类,其中有一个事件日志,该日志记录该类的特定实例,并记录到共享的事件日志中,并跟踪所有实例的更改。

我的问题是我希望日志的条目数可调整大小,并且我需要确保共享日志的大小永远不小于任何实例日志的大小。可以检查吗?

我尝试过的事情:

我已经了解了很多有关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

任何帮助将不胜感激。

1 个答案:

答案 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方法。