在 VB.Net 中的所有 类 中用作 ID 的唯一编号

Unique number to be used as ID across all classes in VB.Net

我有一个应用程序运行多个异步方法来创建消息,这些消息使用唯一 ID 发送到远程主机。

两种类型的消息正在两个不同的 classes 中创建。一个 class 是从另一个继承而来的,但是共享的方法被隐藏了,这意味着它们是不同的。

我希望 ID 是一个递增的整数。

有没有人有完成这个任务的好方法?我已经查看了静态数字的使用和 class 生成的 ID,但它们没有涵盖共享方法问题。

我也知道单个共享方法可以使用静态数字,但是当我的方法被隐藏时这无济于事。

我明白了。我还需要共享 ID,以便它也可以在所有 类 之间共享,而不是我的两种方法独立生成 ID 并了解其他人的当前 ID 号。

代码

Public Property MessageID As Long
Private Shared NextID As Long = 0

Public Shared Function GenerateNextID() As Long
    NextID += 1
    Return NextID
End Function

您需要一些单实例方法来执行此操作。 VB.NET 自然的方式是使用 Module:

Module IDHelper

    Private fLastID As Integer

    Public Function NextMessageID() As Integer
        Return Threading.Interlocked.Increment(fLastID)
    End Function

End Module

这样做的好方法是使用单例。或者类似的东西。但是您与共享成员的最初想法也有效。问题可能在于缺少同步。

Public Class Base

    Private Shared fLastID As Integer

    Protected Function NextMessageID() As Integer
        Return Threading.Interlocked.Increment(fLastID)
    End Function

    Public Function CreateMessage() As String
        Return "Base message is " & NextMessageID()
    End Function

End Class

Public Class Inherited
    Inherits Base

    Public Shadows Function CreateMessage() As String
        Return "Inherited message is " & NextMessageID()
    End Function

End Class

阴影函数几乎从来都不是一个好主意。覆盖是个好方法。