2011-09-14 5 views
0

フォーム間でデータを交換するために、VB(.NET)アプリケーションでグローバル変数を使用するのは良い方法ですか?フォーム間のデータ交換のためのグローバル変数

グローバル変数とは、モジュールで定義されたパブリック変数であり、クラスのパブリックメンバーやプロパティではありません。 私の個人的なルールとしては、クラスからグローバル変数にアクセスすることはありませんが、関数を介してクラスに値を渡します。

私は知っている、私はグローバル変数とその虐待を友人ではありませんが、彼らは単純な/明確なコードを作るためだけの方法であるようにフォームデータの交換にいくつかのケースがあります。

例1: 私のアプリケーションはコマンドライン引数で開始されます。 私はすべてのフォームでこの引数にアクセスする必要があります。MDIロードイベントで引数を読み込んで検証し、グローバル変数に格納するだけです。したがって、私はすべてのフォームからこれらの値を非常に簡単に読み取ることができます。

例2: 私は、(Windows EventLogのような)EventLogプロトコルでアプリケーションのイベントを書き込むプログラムを開発しています。 イベントログの追加、表示、保存、並べ替えを処理するEventLogクラスを作成しました。 次に、グローバル変数gEventLogをEventLogクラスのistanceとしてモジュールに入れ、MDIフォームがロードされたときにオブジェクトを作成しました。 このようにして私はグローバル変数を持ち、プログラムの各フォーム(MDIと子)からEventLogを処理できます。 一方、私は、私のMDIフォームのパブリックメンバーまたはプロパティとしてEventLogを作成することができ、同じであったでしょう。

私が発見し、すでにいくつかの議論を読んで、それ以上のように、Cプログラミングや基本的な議論の問題に仕立て中:

Are global variables bad?

http://c2.com/cgi/wiki?GlobalVariablesAreBad

とVBこの上:

Declare global variables in Visual Studio 2010 and VB.NET

フォーム間のデータ交換のケース(クラスとプログラムの他のコンポーネントとの間ではない)? ありがとうございます。

答えて

0

IoCコンテナを使用するとどうなりますか?

Inversion of control (definition from Wikipedia)

+0

のIoCについて読みません...私は初めてやった、あなたが:-)しかし、IoCのは再びすべての私のプロジェクトの設計を意味します感謝ください。 IoCは面白いアプローチですが、私は最初から始めなければならないと思います... – gingo

+0

リファクタリングはもちろん必要ですが、これはフォーム間のデータ交換の特定のケースについての提案を求めるあなたの質問ではありませんでした。 ServiceLocator:http://msdn.microsoft.com/en-us/library/ff648968.aspxを使用することもできます。この方法で、コマンドラインをカプセル化し、フォームが消費できるサービスにログインすることができます。 –

関連する問題