我有一个应用程序,它运行几个异步方法来创建使用唯一ID发送到远程主机的消息。
在两个单独的类中创建了两种类型的消息。
一个类继承自另一个类,但共享方法是阴影,意味着它们是不同的。
我希望ID是一个递增的整数。
有没有人有一个很好的方法来完成这项任务?
对于那些被投票的人 - 请详细说明原因?我已经查找了静态数字和类生成的id的使用,但它们没有涵盖共享方法问题。
我也知道一个共享方法能够使用静态数字,但是当我的方法被遮蔽时这没有帮助。
你需要一些单实例的方法来做到这一点。 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
阴影函数几乎不是一个好主意。压倒一切是好的方法。
我想到了。我还需要共享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