• 締切済み

VB2005の構造体で配列を含む構造体へアクセスするプロパティの記述方法

VB2005の構造体で、以下のように Dantaiという配列を含む構造体があり、 プロパティを記述する方法で困っています。 Structure Person Dim namae As String Dim toshi As Integer end Structure Structure Dantai Dim m_DantaiMei As String Dim m_Hito() As Person Public Sub New(mei As String) m_DantaiMe = mei Redim m_Hito(100) End Sub '団体名 Public Property Dantai_Mei() As String Get Return m_DantaiMei End Get Set(ByVal value As String) m_DantaiMei = value End Set End Property '人 Public Property ???  '???????????? どのようにプロパティを設定したらよいのでしょうか? '???? '???? 配列で、しかも構造体です。 '???? '???? End Property End Structure Dim dantai As New Dantai("A") MessageBox(dantai.Dantai_Mei) MessageBox(人100人を表示させたい) '?????????????????????????? あと、構造体のDimはデフォルトで、PublicでしょうかPrivateでしょうか? VB2005の構造体について、VB6との違い、クラスとの違いなど詳しく書かれている サイトなどご存じの方教えて下さい。

みんなの回答

回答No.1

Option Strict On Option Compare Binary Option Explicit On 'Option Infer Off VB 2008以上 Module hoge '>あと、構造体のDimはデフォルトで、PublicでしょうかPrivateでしょうか? '後述 Structure Person Dim namae As String Dim toshi As Integer End Structure Structure Dantai Dim m_DantaiMei As String 'Dim m_Hito() As Person 'は(多分VB6との互換性のため)書き方として間違っているわけではないが, '混乱するのでこの書き方にしたほうがいい。 '後はPerson()という型だと思って書けばいい。 '上記の書き方を採っても, '関数の戻り値なんかは結局 'Function hoge() As Person()としか書けない。調べてないけど経験上多分。 Dim m_Hito As Person() Public Sub New(mei As String) m_DantaiMei = mei Redim m_Hito(100) End Sub '団体名 Public Property Dantai_Mei() As String Get Return m_DantaiMei End Get Set(ByVal value As String) m_DantaiMei = value End Set End Property 'こうやって配列を返す。 '配列は書き換え不能だが,各要素は書き換え可能だ。 Public ReadOnly Property Members As Person() Get Return m_Hito End Get End Property End Structure Sub Main() Dim fuga As Dantai fuga = New Dantai("himajin100000") fuga.Members(0).namae = "sadaharu" 'あの状況から全員分表示するとなるとループを使うなりしないとできない System.Console.WriteLine(fuga.Members(0).namae) System.Console.ReadKey(true) End Sub End Module 'ちなみに。 '配列やコレクションみたいに 'hoge(3)とかActiveSheet.Cells(1,2)っていう風になっている '「プロパティ」は何かというと(=メソッドではない) 'デフォルトプロパティっていうのを使っています。 '濫用すると混乱するし,このサンプルには合わないと思ったので使いませんでした。 'http://msdn.microsoft.com/en-us/library/az06zx4y.aspx 'でも望んでいたのはこっちかな? '#戻り値が配列じゃなく配列の要素であることに注目 'ついでに。団体に何人いるかわからないときには, '俺はRedim Preserveとかの配列のまどろっこしいのを使わずに 'System.Collections.Generic.List<T>を検討します。 'VB6のコレクションみたいなものに,Genericsっていう,型の縛りを加えたもの。 '調べてみてね。 'クラスと構造体の違い(スタックとかヒープとか学ばないとさっぱり解らないと思います) 'http://msdn.microsoft.com/ja-jp/library/2hkbth2a.aspx 'さっきの答え:構造体のすべての要素は既定で Public です。 'クラスでは、変数および定数は既定で Private、他のメンバは既定で Public です。 'これにより、クラスのメンバは Visual Basic 6.0 の既定値システムとの互換性を持ちます。 'VB6との違いはこの辺とか。(読んでないけど慣れないと厳しいと思う) 'http://msdn.microsoft.com/ja-jp/library/kehz1dz1%28VS.80%29.aspx '個人的には構造体とかモジュールじゃなく '全部クラスで書くほうが楽だと感じる '理解できるようになったら多分C#,Javaその他の言語も同時にわかるようになる

すると、全ての回答が全文表示されます。

関連するQ&A