C# と VB.NET の質問掲示板

わんくま同盟

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

■83898 / 1階層)  構造体の入れ子
□投稿者/ 魔界の仮面弁士 (1265回)-(2017/04/21(Fri) 10:21:16)
2017/04/21(Fri) 10:26:25 編集(投稿者)

No83897 (Oboe2001 さん) に返信
> VB6までは、Typeで宣言すれば入れ子構造を作ることができました。VB.NET以降では
> TypeではなくStructureやClassを使えば良さそうだ、ということまでは分かりました。

VB4〜VB6 でも、クラスの入れ子はできますね。
Class ステートメントではなく、*.cls ファイルでの宣言になりますが。


> しかしながら、「食材」のところで、「BC30053 配列を'New'で宣言することはできま
> せん」と怒られてしまいます。

要素数を指定して宣言すれば、それだけで配列のインスタンスが生成されますので、
New を使う必要が無いという事です。下記の 4 つはいずれも同じ意味です。


★案1★
Public Class Cls_Food
 Public Fruit(1) As Cls_Fruit
 Public Vegitable(1) As Cls_Vegitable
End Class


★案2★
Public Class Cls_Food
 Public Fruit() As Cls_Fruit
 Public Vegitable() As Cls_Vegitable
 Public Sub New()
  ReDim Fruit(1), Vegitable(1)
 End Sub
End Class

★案3★
Public Class Cls_Food
 Public Fruit() As Cls_Fruit = New Cls_Fruit() {Nothing, Nothing}
 Public Vegitable() As Cls_Vegitable = New Cls_Vegitable() {Nothing, Nothing}
End Class

★案4★
Public Class Cls_Food
 Public Fruit() As Cls_Fruit = New Cls_Fruit(1) {}
 Public Vegitable() As Cls_Vegitable = New Cls_Vegitable(1) {}
End Class


> Food.Fruit(1).Apple(7) = 100 ……のような使い方をしたいのですが、
Cls_Fruit が、VB.NET の「構造体(Strucutre)」や VB6 の「ユーザー定義型(Type)」ではなく、
Cls_Fruit が、VB.NET の「クラス(Class)」や VB6 の「クラス」として宣言されていた場合、
単に配列を確保しただけでは、個々の要素の初期値は Nothing になっています。

ですからクラスの配列であった場合には、VB6 でいうところの
 ReDim Food.Fruit(1)
 Set Food.Fruit(0) = New Cls_Fruit
 Set Food.Fruit(1) = New Cls_Fruit
のような処理が事前に必要です。


配列要素の初期化も併せて行うならこんな感じ。
今回は 0 To 1 な 2 要素な配列だけなので、直接書いてみます。

★案5★
Public Class Cls_Food
 Public Fruit() As Cls_Fruit = {New Cls_Fruit(), New Cls_Fruit()}
 Public Vegitable() As Cls_Vegitable = {New Cls_Vegitable(), New Cls_Vegitable()}
End Class

配列の要素数が多い場合は、初期化処理をコンストラクタ内で
ループ生成した方が良いでしょう。
編集キー/

前の記事(元になった記事) 次の記事(この記事の返信)
←構造体の入れ子 /Oboe2001 返信無し
 
上記関連ツリー

構造体の入れ子 / Oboe2001 (17/04/21(Fri) 09:44) #83897
構造体の入れ子 / 魔界の仮面弁士 (17/04/21(Fri) 10:21) #83898 ←Now
Re[1]: 構造体の入れ子 / 大谷刑部 (17/04/21(Fri) 11:32) #83903
│└ Re[2]: 構造体の入れ子 / Hongliang (17/04/21(Fri) 11:48) #83905
│  └ Re[3]: 構造体の入れ子 / Oboe2001 (17/04/21(Fri) 13:04) #83907 解決済み
│    ├ Re[4]: 構造体の入れ子 / 魔界の仮面弁士 (17/04/21(Fri) 13:22) #83909 解決済み
│    └ Re[4]: 構造体の入れ子 / 大谷刑部 (17/04/21(Fri) 18:27) #83912 解決済み
Re[1]: 構造体の入れ子 / Jitta (17/04/24(Mon) 19:35) #83922 解決済み

上記ツリーを一括表示 / 上記ツリーをトピック表示
 
上記の記事へ返信