DOBON.NET どぼん!のVB道掲示板(プログラム)過去ログ

宣言について

  • 題名: 宣言について
  • 著者: shell
  • 日時: 2003/04/20 18:32:00
  • ID: 975
  • この記事の返信元:
    • (なし)
  • この記事への返信:
  • ツリーを表示
VB5ではたとえば、declalations のコードに
Global ABC as string
などと宣言して
ABC=1


次にForm1を表示して
Form1.Label1.caption=ABC
とすればABCの値が保持されていてLabel1に値"1"が表示されていました。
VB.NETでは上手く行きません。
値の保持の仕方を教えてください。
(どこにグローバル変数を宣言すればいいのでしょうか。またはやり方が全然違うのでしょうか?)
  • 題名: 回答:宣言について
  • 著者: 匿名
  • 日時: 2003/04/21 15:22:00
  • ID: 977
  • この記事の返信元:
  • この記事への返信:
    • [978] 追記 匿名 2003/04/21 15:38:00
  • ツリーを表示
2つ方法があります。

まず、グローバル変数そのものが使えます。モジュール を使います。(Class と同じレベルで Module というのがあります)モジュールで作ると、その中のメソッド、変数は(宣言したスコープが public であれば)どこからでも参照できるものになります。これは、複数のクラスが共通で使う、アプリケーション全体のオプションや定数、という目的で使います。

クラス共通の値を使うだけなら、クラス内にローカル変数を作ります。一般的に、そのクラスが目的としている機能に関係する値は、そのクラスのプロパティとして、そのクラスに値を保持させます。クラスにローカル変数を作ったら、public にして直接値を参照できると安全性からまずいので、private か protected にして、対応したプロパティを作ります。プロパティの宣言は sub や function と同レベルで property というのがあります。

さらに付け加えて、クラス共通で、クラスが複数のインスタンスとして使われる時でも、全てのインスタンスが同じ値を保持したい時(あるいはクラスをオブジェクト化しないで直接クラス名から値を取得したい時)は、static を指定します。public static *** と宣言するとどこからでも クラス名.*** でアクセスできます。
わかりにくい説明になってしまってすいません。
ですが、グローバル変数は、定数やオプションなどの値以外では使用しない方がよいので、クラスの変数を上手く使ってください。

例えば先の例ではフォーム上のラベルに値を設定してますが、次のような構成が考えられます。


・何かの値の処理

値の取得

    ---> フォームの処理(値をもらってそれを加工して戻す)

値の保存


このような流れの時、変数は呼び出した元のクラスに保持されていて、その値をフォームに手渡して処理させ、さらに結果を受け取るという仕組みができます。この場合、呼び出されるフォームには、その値を受け取るための変数を作り、フォームに新しいプロパティを追加してやることが出来ます。フォームを呼び出すときにはそのプロパティを返してのみ、受け渡しし、フォームはそのプロパティで受け取った値を正常に処理するだけでよい、というのがオブジェクト指向の基本的な作り方です。

※さらに、値に機能が関連付けられそうなら、その値を管理するクラスを作ります。(値の参照はそのクラスのプロパティから、ということになります)


逆に、グローバル変数を使って外からフォーム上のコントロールの値を直接設定するようなやりかたは、どこで何を処理しているのか?わからなくなりオブジェクト指向から遠ざかります。.net は事実上オブジェクト指向で動作しているので、こういう書き方をしていくと、プログラムはいつか破綻します。

VB6時代から同様のやり方をすべきでしたが、多くのVBユーザーはそういうことにはなれていないようなので、そのまま VB.net でもやってしまいそうだと心配しています。ぜひ、グローバール変数を使わない方法から検討してください。

DOBON.NET | プログラミング道 | プログラミング掲示板