新生活を充実させるための「こだわり」を取材!!

画面上に、
名前を入力するTextBoxがひとつと、
顧客情報を入力するDataGridViewがひとつあり、
そのDataGridViewには、連番、名前、メールアドレスの3列, 20行のデータがあります。

この2つのコントロールから入力されたデータをDBに登録したり、
DBから読み込んだ値を表示しようとしています。
(ほかにもいろいろ処理するのですが。)

データを一時的に保持しておくクラスを作ろうと考え、
わざわざインスタンスを作るまでもないと思ったので、
staic public なメンバを使用して、
以下のようなクラスを作ってみました。

  class Data {
   public class Customer
   {
    static public int no = 0;
    static public string name = "";
    static public string mailAddr = "";
   }

   static public string name = "";
   static public Customer[] customers = new Customer[20];
  }

ところが、たとえば、

  customers[0].no = 1;

のようにしようとすると、

  「インスタンス参照でメンバー 'Data.Customer.no' にアクセスできません。代わりに型名を使用してください。」


となります。
どういう意味でしょう?
また、どうすれば static public の配列を持てるでしょうか?
(そもそもこういうやりかたはしない?)

よろしくお願いします。

教えて!goo グレード

A 回答 (1件)

   public class Customer


   {
    static public int no = 0;
    static public string name = "";
    static public string mailAddr = "";
   }
と書いたとき、no 等が定義されるのはそのインスタンス(new 等で生成したモノ)ではなくクラスそのものになります。一方、customers 自体はともかくcustomers[0] に入っているモノはインスタンスです。
したがって、そのインスタンスで定義されていない no へのアクセスはできません。

Customer の定義を
   public class Customer
   {
    public int no = 0;
    public string name = "";
    public string mailAddr = "";
   }
と変えましょう。

……でもこの修正をしてもコンパイル時じゃなくって実行時にエラーが出るんじゃないかなぁ?
    • good
    • 0
この回答へのお礼

早速回答をいただきありがとうございます。

なるほど、わかりました。
static の意味がまだよく理解できていなかったということです。

参考になりました。

ところで、このプログラム方は、
回答をいただくまでの間に、このやりかたをやめて、普通のプロパティにしました。

どうもありがとうございました。

お礼日時:2014/05/21 19:35

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

このQ&Aを見た人はこんなQ&Aも見ています

教えて!goo グレード

このQ&Aを見た人がよく見るQ&A

人気Q&Aランキング