我有一个需要计算每个索引的共享数组。现在,数组在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/了解它的发展方向。
答案 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