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

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

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

Re[3]: クラスの配列の値をまとめて初期化したい


(過去ログ 81 を表示中)

[トピック内 4 記事 (1 - 4 表示)]  << 0 >>

■48048 / inTopicNo.1)  クラスの配列の値をまとめて初期化したい
  
□投稿者/ OROCHI (6回)-(2010/03/23(Tue) 00:22:48)

分類:[C#] 

OS XP SP3
Visual studio 2005

こんにちは、以下のようなクラスの配列を作ろうとしています

public class Specfication_MAP
    {
        public string ground;      
        public string wall;        
        public string hitwall;     
        public string stagename;   
        public string stagename_E; 
        public int npc_num;        
    };

このクラスには上にあるように6つの要素を持つのですが、このクラスを配列にして使おうと考えています
ということで、以下のように配列を作りました

 private Specfication_MAP[] sm = new Specfication_MAP[999];
 for (int a = 0; a < 999; a++)
 {
        sm[a] = new Specfication_MAP();
 }

これで配列形成はできたのですが、この配列に値を代入するときに、CやC++の構造体のように「まとめて」代入する方法というものはあるのでしょうか?
(例)
sm[0] = {"a","b","c","d","e",0}

この配列の値を使うときは、要素6つが全部そろっている必要があります。
ということで、書き漏らし防止や見やすさを考えて上の例のようにまとめて書きたいのですが、いかがでしょうか?

引用返信 編集キー/
■48050 / inTopicNo.2)  Re[1]: クラスの配列の値をまとめて初期化したい
□投稿者/ 魔界の仮面弁士 (1570回)-(2010/03/23(Tue) 08:11:12)
No48048 (OROCHI さん) に返信
>「まとめて」代入する方法というものはあるのでしょうか?
メンバがすべて揃っている必要がある場合には、
クラスに『コンストラクタ』を用意するようにします。

そうすれば、
> sm[a] = new Specfication_MAP();
 sm[a] = new Specfication_MAP("a","b","c","d","e",0);
のように指定することができます。

あるいは、オブジェクト初期化子という物もありますが、
今回の場合には、コンストラクタを用意したほうが良いかと思います。
http://msdn.microsoft.com/ja-jp/library/bb384062.aspx
引用返信 編集キー/
■48053 / inTopicNo.3)  Re[2]: クラスの配列の値をまとめて初期化したい
□投稿者/ あぴす (6回)-(2010/03/23(Tue) 09:29:57)
初期化ならコンストラクタを設定してやればよいと思います。

また、代入であればコピーコンストラクタを定義してやればよいのではないでしょうか。
http://msdn.microsoft.com/ja-jp/library/ms173116(VS.80).aspx
引用返信 編集キー/
■48067 / inTopicNo.4)  Re[3]: クラスの配列の値をまとめて初期化したい
□投稿者/ OROCHI (8回)-(2010/03/23(Tue) 14:19:42)
ありがとうございました

目的が初期化だったので、以下のようにクラスにコンストラクタを作ることで解決できました
ありがとうございます

// クラス

 public class Specfication_MAP
    {
        public string ground;      // 地面
        public string wall;        // 壁やオブジェクト
        public string hitwall;     // 当たり判定用オブジェクト
        public string stagename;   // ステージ名表示
        public string stagename_E; // ステージ名英語
        public int npc_num;        // npcの配置数

        // コンストラクタ
        public Specfication_MAP(string ground, string wall, string hitwall, string stagename, string stagename_E, int npc_num)
        {
            this.ground = ground;
            this.wall = wall;
            this.hitwall = hitwall;
            this.stagename = stagename;
            this.stagename_E = stagename_E;
            this.npc_num = npc_num;
        }
    };

// インスタンス生成など
public Specfication_MAP[] sm = new Specfication_MAP[999];  

sm[0] = new Specfication_MAP("a","b","c","d","e",0);

解決済み
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -