在for / next循环中设置共享值

时间:2015-07-13 15:19:12

标签: vb.net initialization shared

我有一个需要计算每个索引的共享数组。现在,数组在New()中初始化,并在每次创建对象时执行,这是多余的。如何设置它以便在创建数组时仅初始化一次?像Java中的静态块一样?

我最初没有包含代码,因为我认为这只是一个简单的问题。构造函数被调用64次(使用位值),相关代码是:

' Decimal value of each bit
Public Shared bitValue(63) As Long

Public Sub New()
    ' Other non-relevant code here.

    For index = 0 To 63
        bitValue(index) = 1L << index
    Next
End Sub

万一你想知道我在做什么,我正在重写一个与Cast和bitwise运算符一起工作的Java程序。作为学习VB的一部分,我正在进行翻译。您可以转到http://sourceforge.net/projects/javabitwise/了解它的发展方向。

2 个答案:

答案 0 :(得分:2)

您可以立即初始化

Class Test1

    Private Shared _list As New List(Of String) From {"1", "2"}

End Class

或者在共享构造函数

中执行此操作
Class Test2

    Private Shared _list As List(Of String)

    Shared Sub New()
        _list = New List(Of String)
        _list.Add("1")
        _list.Add("2")
    End Sub

End Class

或者检查新值

中是否初始化了值
Class Test3

    Private Shared _list As List(Of String)

    Public Sub New()

        ' Use synclock
        If _list Is Nothing Then
            _list = New List(Of String)
            _list.Add("1")
            _list.Add("2")
        End If

    End Sub

End Class

或者将您的列表放在单身

答案 1 :(得分:0)

这是Singleton方法的一个简单示例。我们通过Instance()函数访问该类:

Public Class Form1

    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
        Debug.Print(KibblesAndBits.Instance.bitValue(10))
    End Sub

End Class

Public Class KibblesAndBits

    Private Shared _Kibbles As KibblesAndBits = Nothing

    Public Shared Function Instance() As KibblesAndBits
        If IsNothing(_Kibbles) Then
            _Kibbles = New KibblesAndBits ' the private constructor will now fire and initialize
        End If
        Return _Kibbles
    End Function

    Public bitValue(63) As Long

    Private Sub New() ' Private Constructor means you can't instantiate it directly
        For index = 0 To bitValue.Length - 1
            bitValue(index) = index
        Next
    End Sub

    ' ... other standard Class code ...    

End Class