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

问题描述 投票:-2回答:2

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

在两个单独的类中创建了两种类型的消息。

一个类继承自另一个类,但共享方法是阴影,意味着它们是不同的。

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

有没有人有一个很好的方法来完成这项任务?

对于那些被投票的人 - 请详细说明原因?我已经查找了静态数字和类生成的id的使用,但它们没有涵盖共享方法问题。

我也知道一个共享方法能够使用静态数字,但是当我的方法被遮蔽时这没有帮助。

vb.net asynchronous uniqueidentifier
2个回答
0
投票

你需要一些单实例的方法来做到这一点。 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

阴影函数几乎不是一个好主意。压倒一切是好的方法。


0
投票

我想到了。我还需要共享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
© www.soinside.com 2019 - 2024. All rights reserved.