在VB.Net

时间:2018-04-16 11:13:30

标签: vb.net asynchronous uniqueidentifier

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

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

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

我希望ID是递增的整数。

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

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

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

2 个答案:

答案 0 :(得分: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

答案 1 :(得分: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

阴影功能几乎不是一个好主意。压倒是最好的方法。