none
グローバル変数について RRS feed

  • 質問

  • いつもお世話になっています。

    vb2005で、グローバル変数は、どこにどのように記述するのですか。

    素人なのでよくわかりません。よろしくお願いします。

    尚、じゃんぬねっとさんへ、

    前回、変数の受け渡し方で、webを紹介してもらいましたが、

    TextBoxの内容は受けれますが、純粋に変数をグローバルにはでき

    ないのですか。

    それとも、webの中にヒントがあったのでしょうか。

    2007年8月8日 5:41

回答

  • Danieruさんが言われているような意味でのグローバル変数であれば、変数にPublicを付けたものになるでしょう。ただし、オブジェクト指向であるため、Form2でForm1のインスタンスを取得していなければなりません。

     

    Sharedとはあるクラスのインスタンス全てにおいて、共有されることを意味します。

    通常、あるクラスのインスタンスが複数あったとすれば、それぞれのインスタンスにおける変数は全て独立しています。しかし、その変数にSharedを付ければ、全てのインスタンスにおける変数は共有されます。つまり、一つしかありません。

     

    hogeクラス hogeインスタンス1 変数moge

                    hogeインスタンス2 変数moge

                    hogeインスタンス3 変数moge

                    hogeインスタンス4 変数moge

                    hogeインスタンス5 変数moge

     

    上の5つの変数mogeはそれぞれ独立しており、5つ存在する。

     

    hogeクラス hogeインスタンス1 Shared 変数moge

                    hogeインスタンス2 Shared 変数moge

                    hogeインスタンス3 Shared 変数moge

                    hogeインスタンス4 Shared 変数moge

                    hogeインスタンス5 Shared 変数moge

     

    上の変数mogeは共有されており、1つしか存在しない。

     

    このSharedの仕組みを利用してModuleに変数を宣言し(自動的にSharedになる)、そこに値を出し入れすることにより各クラス間で共有を実現する方法もあります。

    2007年8月8日 12:26
    モデレータ

すべての返信

  • SharedやModuleについて調べてみて下さい。ただ、グローバル変数をあまり多用するとコードの見通しが悪くなります。グローバル変数には一定の名前付け規則などを適用して、それがグローバル変数であることがすぐにわかるようにした方が良いでしょう。以下も参考にして下さい。

     

    第7回 VBのモジュールはオブジェクト指向に不要?
    http://www.atmarkit.co.jp/fdotnet/vbcheer/vbchher07/vbcheer07.html

    2007年8月8日 10:32
    モデレータ
  • trapemiyaさん

    私の認識が間違っているのか、グローバル変数について再確認します。

    グローバル変数は、Form1でデータを保持し、Form2でそのデータを使えるものではないのですか。

    私の手元にある資料では、一つの変数をどちらでも利用できる様なことしかわかりません。

    Form1でデータを保持し、Form2で利用できるわけではないのですか。

     

     

     

    2007年8月8日 11:38
  • Danieruさんが言われているような意味でのグローバル変数であれば、変数にPublicを付けたものになるでしょう。ただし、オブジェクト指向であるため、Form2でForm1のインスタンスを取得していなければなりません。

     

    Sharedとはあるクラスのインスタンス全てにおいて、共有されることを意味します。

    通常、あるクラスのインスタンスが複数あったとすれば、それぞれのインスタンスにおける変数は全て独立しています。しかし、その変数にSharedを付ければ、全てのインスタンスにおける変数は共有されます。つまり、一つしかありません。

     

    hogeクラス hogeインスタンス1 変数moge

                    hogeインスタンス2 変数moge

                    hogeインスタンス3 変数moge

                    hogeインスタンス4 変数moge

                    hogeインスタンス5 変数moge

     

    上の5つの変数mogeはそれぞれ独立しており、5つ存在する。

     

    hogeクラス hogeインスタンス1 Shared 変数moge

                    hogeインスタンス2 Shared 変数moge

                    hogeインスタンス3 Shared 変数moge

                    hogeインスタンス4 Shared 変数moge

                    hogeインスタンス5 Shared 変数moge

     

    上の変数mogeは共有されており、1つしか存在しない。

     

    このSharedの仕組みを利用してModuleに変数を宣言し(自動的にSharedになる)、そこに値を出し入れすることにより各クラス間で共有を実現する方法もあります。

    2007年8月8日 12:26
    モデレータ
  • trapemiyaさんありがとうございます。

    大変参考になりました。

    2007年8月8日 12:53
  • 今さらの感もありますが、VBの話を。

    VBには元々、標準モジュールと言うものがありまして、アプリケーションで共通に使うFunctionやSubを定義します。 また、ここのソースの頭の方でPublic変数を宣言すると、同じアプリケーション(プロジェクト)の全フォームから参照できます。 これがグローバル変数に相当するものです。 (VB2005ではグローバルと言う言い方はあまりせず、Publicがそれに近いでしょう。)

    標準モジュールとはVB6までの言い方ですが、VB2005にも「モジュール」という言い方で似たものは存在します。

     

    2007年8月22日 2:32
  • 似たものというか、このレベルだとまったく同じといえる代物ですね。
    VB6 時代は Define くらいでしか使っていませんでしたが。(.NET では一度も使っていないです)


    ところで、名指しで質問されていることに今さら気付きました。
    気付くことができなくて、反応できなくてすみません。

    質問される時は名指しする必要はありませんので、広く意見を集められるようにしましょう。

    2007年8月22日 6:24