アプリ版:「スタンプのみでお礼する」機能のリリースについて

早速ですが、教えてください(開発環境は 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だけでもかまいません、よろしくお願いします)

A 回答 (2件)

'こんな感じ


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
    • good
    • 0
この回答へのお礼

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

お礼日時:2005/11/25 13:04

# キーワードだけ。



コンストラクタ
    • good
    • 0
この回答へのお礼

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

お礼日時:2005/11/25 12:59

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!