早速ですが、教えてください(開発環境は 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だけでもかまいません、よろしくお願いします)
No.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
ありがとうございます!(^^)!まさに求めていたとおりです。
この方法でやれば、クラスが入れ子?になっていても問題ないですね。
No1さんからのヒントのとおり、コンストラクタでやる方法は試していたんですが
Dim data() As CCC = new CCC(){ _
New CCC(1, "aaa"), New CCC(2, "bbb"), New CCC(3, "ccc")}
この記述にたどりつけていませんでした。^^;
基本が、わかっていないですね・・・すみません
でも、ほんとに助かりましたありがとうございます。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) 稀に1円合いません? Sheet1から金額と個数を貼り付ける下記コードで、金額を切り上げるコードを何 3 2022/09/05 15:11
- Visual Basic(VBA) 2つ目のコンボボックスが動作しません。 3 2023/03/25 12:29
- Visual Basic(VBA) VBA 別ブックからの転記の高速化について VBA 別ブックからの転記の高速化についてご教授下さい。 19 2022/07/26 13:07
- Visual Basic(VBA) いつもお世話になっております、VBAで教えて頂きたいのですが 2 2022/05/05 22:20
- Visual Basic(VBA) VBAで質問ですが、皆さんはどの様に導き出しているのでしょうか? 6 2022/05/03 21:53
- Visual Basic(VBA) 別シートから年齢別の件数をカウントしたいの続き 5 2023/01/24 00:16
- Excel(エクセル) B列に文字がはいったらA列に数字が入るマクロードを完成させたい 4 2023/04/21 01:58
- Visual Basic(VBA) 【Excel VBA】自動メール送信の機能追加 5 2022/09/29 12:53
- Visual Basic(VBA) 【VBA】写真の貼り付けコードがうまく機能しません。 5 2022/09/01 18:43
- Visual Basic(VBA) batからexeを実行し戻り値を受け取る バッチからEXEの結果を受け取りたいのですが、 下記のバッ 1 2023/07/04 15:13
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Java初級 引数に適用できません
-
public static void main (Stri...
-
レコード件数の表示
-
StringBufferからStringへキャ...
-
VBAで新規ファイル名
-
abstract と static を一緒に付...
-
C# でメソッドに送られてきたOb...
-
不要なstaticメソッドの見分け...
-
Java初心者です、エラーの意味...
-
Google Apps Script で getRang...
-
String.containsの反対機能はあ...
-
親の親のメソッドを呼ぶには?
-
リストボックスの並べ替え (VB...
-
djUnit コンストラクタがpriva...
-
なぜprotected overrideなのか
-
戻り値の異なるメソッドの多重...
-
return new使用時
-
JComponentを継承して処理をJBu...
-
【C#】WebBrowser上で表示され...
-
Javaの初期化メソッドについて
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Java初級 引数に適用できません
-
public static void main (Stri...
-
レコード件数の表示
-
abstract と static を一緒に付...
-
なぜprotected overrideなのか
-
C# 点の描き方をおしえてくだ...
-
コマンドライン引数のチェック
-
String.containsの反対機能はあ...
-
Google Apps Script で getRang...
-
StringBufferからStringへキャ...
-
Java初心者です、エラーの意味...
-
javaに"search"という関数 or ...
-
C# でメソッドに送られてきたOb...
-
YYYYMMDD書式の日付に対する適...
-
メソッド宣言の戻り値の型にク...
-
return new使用時
-
readLine()ではじめから読み直...
-
シェルスクリプトからのJavaメ...
-
Fileの読み取り専用の解除
-
親の親のメソッドを呼ぶには?
おすすめ情報