こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

クラスの初期値設定について

早速ですが、教えてください(開発環境は WindowsXP,VisualBasic.NET2003 です)

Public Class CCC
Private Key As Integer
Private Value As String
End Class
上記のようなクラスを用意して

Public Sub SSS()
Dim III() As CCC = New CCC() {{1, "VALUE1"}, _
{2, "VALUE2"}}
End Sub
といった具合に初期値を設定したいのですが、
コンパイルエラー(配列初期化子の次元が多すぎます。)に
なってしまいます。(ほかに思いついた記述パターンも試してみましたがだめでした)

仕方なく、CCCに下記のようなメソッドを作って
Public Class CCC
Private Key As Integer
Private Value As String
Public Sub SetValue(ByVal a As Integer, ByVal b As String)
Key = a
Value = b
End Sub
End Class
このメソッドを利用し
Public Sub SSS()
Dim III() As CCC
III(0).SetValue(1, "VALUE1")
III(1).SetValue(2, "VALUE2")
End Sub
上記のように初期値を設定するようにしています。
初期化子({})をつかって、C言語?風に初期値を設定することは
できないのでしょうか?
上記の例では、顕著に現れてませんが、クラスの中のクラスにも
初期値を設定しようとする場合、どのような初期値が設定されて
いるかが、ソース上、整然と並ばなくなってしまい、修正しにくい
、見た目が美しくない状態になってしまいます。
何かよい方法はないのでしょうか?ご教示願います。
(参考URLだけでもかまいません、よろしくお願いします)

投稿日時 - 2005-11-25 09:43:38

QNo.1800245

困ってます

質問者が選んだベストアンサー

'こんな感じ
Imports System

Module Module1

Public Class CCC
Private Key As Integer
Private Value As String
Public Sub New (i As Integer, s As String)
Key = i
Value = s
End Sub
Overrides Public Function ToString() As String
ToString=String.Format("CCC({0},{1})",Key, Value)
End Function
End Class

Sub Main()

Dim data() As CCC = new CCC(){ _
New CCC(1, "aaa"), New CCC(2, "bbb"), New CCC(3, "ccc")}
for each c As CCC in data
Console.WriteLine(c)
next

End Sub
End Module

投稿日時 - 2005-11-25 12:27:55

お礼

ありがとうございます!(^^)!まさに求めていたとおりです。
この方法でやれば、クラスが入れ子?になっていても問題ないですね。
No1さんからのヒントのとおり、コンストラクタでやる方法は試していたんですが
Dim data() As CCC = new CCC(){ _
New CCC(1, "aaa"), New CCC(2, "bbb"), New CCC(3, "ccc")}
この記述にたどりつけていませんでした。^^;
基本が、わかっていないですね・・・すみません
でも、ほんとに助かりましたありがとうございます。

投稿日時 - 2005-11-25 13:04:40

このQ&Aは役に立ちましたか?

1人が「このQ&Aが役に立った」と投票しています

回答(2)

ANo.1

# キーワードだけ。

コンストラクタ

投稿日時 - 2005-11-25 10:51:42

お礼

コンストラクタで自分なりに挑戦してみたんですがどうもうまくいかなくって・・・わかってみると、どうやら、コンストラクタのつくりはあってたんですが、その使用方法が間違っていたみたいです。ありがとうございました<m(__)m>

投稿日時 - 2005-11-25 12:59:19

あなたにオススメの質問