以前の記事「【VB.NET】構造体の項目に別の構造体を利用する」に関連した話題。
構造体の項目数を可変にしたい場合がある。
このような場合には、動的配列やArrayListを利用して実装することが多い。
動的配列は、状況によって極端にパフォーマンスが低下するため、ArrayListを利用することが多い。
(これについては、以前の記事「【VB.NET】ReDimとArrayList」を参照)
ArrayListを利用する場合、インスタンスの生成が必要になる。
構造体の項目は、宣言と同時にインスタンスを生成(newキーワードを指定)することができない。
そのため、別のタイミングでインスタンスを生成することになる。
前回のサンプルの部署情報が複数あることにした場合、以下のようになる。
構造体の項目数を可変にしたい場合がある。
このような場合には、動的配列やArrayListを利用して実装することが多い。
動的配列は、状況によって極端にパフォーマンスが低下するため、ArrayListを利用することが多い。
(これについては、以前の記事「【VB.NET】ReDimとArrayList」を参照)
ArrayListを利用する場合、インスタンスの生成が必要になる。
構造体の項目は、宣言と同時にインスタンスを生成(newキーワードを指定)することができない。
そのため、別のタイミングでインスタンスを生成することになる。
前回のサンプルの部署情報が複数あることにした場合、以下のようになる。
Public Class StructureSample
'社員情報
Public Structure Employee
Dim EmpID As Integer
Dim Name As String
'部署情報を項目に利用する
Dim DeptList As ArrayList
End Structure
'部署情報
Public Structure Dept
Dim DeptID As Integer
Dim Name As String
End Structure
Public Shared Sub Main()
Dim Sample As New StructureSample
Dim Emp As StructureSample.Employee
Emp.DeptList = New ArrayList()
'値の設定
Emp.EmpID = 1
Emp.Name = "社員A"
For idx = 0 To 2
Dim sDept As New StructureSample.Dept
sDept.DeptID = idx
sDept.Name = "部署" & idx
Emp.sDept.Add(sDept)
Next idx
'値の出力
Console.WriteLine("EmpID=" & Emp.EmpID)
Console.WriteLine("Name=" & Emp.EmpName)
For Each sDept As StructureSample.Dept In Emp.DeptList
Console.WriteLine("DeptID=" & sDept.DeptID)
Console.WriteLine("DeptName=" & sDept.Name)
Next
End Sub
End Class
【補足情報】
・インスタンスの生成は、構造体を利用する前に行う。
→正確には、ArrayListオブジェクトの項目を利用する前に行う。
'社員情報
Public Structure Employee
Dim EmpID As Integer
Dim Name As String
'部署情報を項目に利用する
Dim DeptList As ArrayList
End Structure
'部署情報
Public Structure Dept
Dim DeptID As Integer
Dim Name As String
End Structure
Public Shared Sub Main()
Dim Sample As New StructureSample
Dim Emp As StructureSample.Employee
Emp.DeptList = New ArrayList()
'値の設定
Emp.EmpID = 1
Emp.Name = "社員A"
For idx = 0 To 2
Dim sDept As New StructureSample.Dept
sDept.DeptID = idx
sDept.Name = "部署" & idx
Emp.sDept.Add(sDept)
Next idx
'値の出力
Console.WriteLine("EmpID=" & Emp.EmpID)
Console.WriteLine("Name=" & Emp.EmpName)
For Each sDept As StructureSample.Dept In Emp.DeptList
Console.WriteLine("DeptID=" & sDept.DeptID)
Console.WriteLine("DeptName=" & sDept.Name)
Next
End Sub
End Class
【補足情報】
・インスタンスの生成は、構造体を利用する前に行う。
→正確には、ArrayListオブジェクトの項目を利用する前に行う。
- カテゴリ:
- VB.NET



