みんなの「教えて(疑問・質問)」にみんなで「答える」Q&Aコミュニティ

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

解決済みの質問

C#でオブジェクトの配列を使う

開発環境はMicrofoft visual stdio 2005 で開発言語はC#を使い、Windousアプリケーションでプログラミングしているのですが
オブジェクトを配列でせんげんし、オブジェクトのメンバを使うとエラーが出てしまいます。ソースコードで説明すると
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;

namespace WindowsApplication1
{
  public partial class Form1 : Form
  {
    public class car
    {
      int a;

      public void set(int i)
      {
        a = i;
      }
    }

    public Form1()
    {
      InitializeComponent();
    }

    private void label1_Click(object sender, EventArgs e)
    {
      car[] bike = new car[1];
      bike[0].set(1);//ここでひっかかる
    }
  }
}

これをじっこうするとデバックは通るのですが、label1_Clickイベントが発生すると、「NULLの場所を参照しています」という意味のエラーが出てしまいます。
C#はほとんど初心者なので、初歩的なミスだとおもうんですが、
よろしければ御回答をお願いします。

投稿日時 - 2008-06-09 10:41:59

QNo.4086565

困ってます

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

こんにちわ。

確かにそのコードでは、エラーになります。

配列というのは、単にデータの集合を現しているに過ぎません。
つまり、

car[] bike = new car[1];

という記述は、carオブジェクトが1つ入る「箱(bike)」を用意しているに過ぎず、
上記の段階で、箱の中にcarオブジェクトが入るわけでありません。

箱の中にcarオブジェクトが入っていないにも関わらず、
以下のような記述をしてしまうと、

bike[0].set(1);

「bike[0]には何も入っていない=Null」と判定されエラーになってしまうのです。

質問者様がお望みの動きをさせたい場合、carオブジェクトをインスタンス化する必要があります。
つまり、

car[] bike = new car[1];
car myCar = new car();
myCar.set(1);
bike[0] = myCar;

または、

car[] bike = new car[1];
bike[0] = = new car();
bike[0].set(1);

となります。

投稿日時 - 2008-06-09 10:57:33

お礼

なるほど・・・配列を宣言した時点では、オブジェクトがはいっていなかったのですね><。
わかりやすくて、親切なお返事ありがとうございます。たすかりました^^。

投稿日時 - 2008-06-09 15:40:04

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

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

回答(1)

あなたにオススメの質問