• 締切済み

VB.NET2013多次元構造体の初期化について

Visual Studio2013 VB.NETを始めたばかりです 多次元構造体の初期化で困ってました 内容的には Public Structure ST1 Public a1 As Boolean Public a2 As Integer <VBFixedArray((9), (2)), MarshalAs(UnmanagedType.ByValArray, sizeconst:=30)> _ Public a3(,) As Long Public Sub Initialize() ReDim a3(9, 2) End Sub End Structure Public ss1(0) as ST! Public Sub test() ss1.Initialize() ss1(0).a3(0,0)=0 この状態では、多次元配列は確保されなくNothingで 初期化できない、参照型であると言うのが分かり 色々と調べてみてやっと、 コピーコンストラクタを用意して複製する方法で出来るのが分かりました Public Sub New(ByVal ss As ST1) MyClass.a1 = ss.a1 MyClass.a2 = ss.a2 MyClass.a3 = DirectCast(ss.a3.Clone(), Long(,)) End Sub End Structure Public Sub test() Dim ss0 As ST1 ss0.a1 = True ss0.a2 = 1 ss0.a3 = New Longr(,) {・・・・} Dim ss1(0) As New ss0 ただa3のサイズが大きいため定義するのは大変なので Dim bb(9,2) As Long ss0.a3 = bb としても上手く初期化できるのが分かり そしてステップ実行で中を確認していると あれっと思い 「コピーコンストラクタを用意して複製」 の方法ではなく元のまま Public Sub test() Dim bb(9,2) As Long ss1.Initialize() ss1(0).a3=bb とすると、上手く初期化され ss1(0).a3(0,1) = 100 と処理できるようになりました ただ、これで本当にいいのかが分かりません よろしくお願いします

みんなの回答

  • hue2011
  • ベストアンサー率38% (2801/7249)
回答No.1

多次元構造体なんていう言い方をしていますがオブジェクトです。 オブジェクトの初期化というのは、オブジェクト自体の初期化をするのが正解だし安全です。 つまり、そのオブジェクトを破棄し、同じ名前でクリエイトするだけです。 コンストラクターがちゃんと初期化ステップを記述してあれば、それだけでOKです。 Initializeというような、意味でひきずられたりするコーディングはやめたほうが悩まなくて済みます。

mouten
質問者

お礼

有り難うございます 還暦過ぎた年寄りには新しい言葉が次から次に出てくるので 覚えるのも理解するのも追いつきません Initializeは不要だと思ってました 実は、ss1は動的配列として使用しているのですが a3 の値全てが最後にセットした値と同じになってて悩んでいましたが 回答の内容を元に、色々調べた結果解決しました

関連するQ&A