DOBON.NET DOBON.NETプログラミング掲示板過去ログ

定数の参照の方法

環境/言語:[Windows XP]
分類:[.NET]

こんにちは お世話になっています。
すみませんが御教授お願いします。

C#2005Express です。
ソリューション Test
プロジェクト A (名前空間はA) クラス Form1
プロジェクト B (名前空間はB) クラス Form2
の構成になっています。

プロジェクトAがメインでプロジェクトBはサブです。

Form1 内で
public const string 定数1 = "2000";
と宣言しこれをプロジェクトB で使いたいのですがコンパイル
エラーがでます。

Form1 では
Form2 fm2 = new B.Form2();
fm2..ShowDialog();
としています。

ここで クラス Form2 内で 定数1を使用したいので
Form2 のメッソドで
string 制限 = A.Form1.定数1; と書くとエラーになります。
エラー内容は 「名前 'A' は現在のコンテキスト内に存在しません。」となります。

string 制限 = Form1.定数1; と書くと
エラー内容は 「名前 'Form1' は現在のコンテキスト内に存在しません。」となります。

プロジェクトBの参照追加に プロジェクトA を指定すると 「循環参照」で追加できません。

定数1はプロジェクト全体に関わるのでメインのForm1で指定したいのです。

すみませんが宜しくお願いします。
エツさん,こんばんは。
私の頭では下の3つ位しか思いつきません。
私だったら手っ取り早いという理由で2番を選びます。

1.プロジェクトAの参照からプロジェクトBを削除し,プロジェクトBの参照にプロジェクトAを追加する。

2.新たにプロジェクトCを作成し,そこで定数を定義し,プロジェクトA,プロジェクトBの両方の参照に追加する。

3.プロジェクトBで定数を定義する。
■No14910に返信(YASさんの記事)

YASさん おはようございます。
回答有難うございます。


> エツさん,こんばんは。
> 私の頭では下の3つ位しか思いつきません。
> 私だったら手っ取り早いという理由で2番を選びます。
>
> 1.プロジェクトAの参照からプロジェクトBを削除し,プロジェクトBの参照にプロジェクトAを追加する。
>
これを試しますとForm1 の
Form2 fm2 = new B.Form2();
でコンパイルエラーが発生します。
エラー内容
「型または名前空間名 'B' が見つかりませんでした。using ディレクティブまたはアセンブリ参照が不足しています。」



> 2.新たにプロジェクトCを作成し,そこで定数を定義し,プロジェクトA,プロジェクトBの両方の参照に追加する。
>
これでOKです。
しかしプロジェクトA が全てを管理していますので「プロジェクトAのプロパティ、メソッドの呼び出しもできたらいいなあ」と思っていますのでプロジェクトAに書きたいのです。



> 3.プロジェクトBで定数を定義する。
>
これもOKです。

回答を参考にさせて頂きまして、もう少し検討します。
有難うございました。
  • 題名: Re[3]: 定数の参照の方法
  • 著者: はいこーん
  • 日時: 2006/03/21 13:23:57
  • ID: 14924
  • この記事の返信元:
  • この記事への返信:
    • (なし)
  • ツリーを表示
■No14919に返信(エツさんの記事)
> しかしプロジェクトA が全てを管理していますので「プロジェクトAのプロパティ、メソッドの呼び出しもできたらいいなあ」と思っていますのでプロジェクトAに書きたいのです。

なんて言われてもね・・・
自分の設計がまずいという根本を疑うべきだったりするんです。

すべてを管理してるならば、AはBと同じような位置にいてはいけない。
提案されたCで担うことはAですべきことで、Aは余計なことをしてはいけない。
と、このようにAを親にさせているくせに、Bと似たような次元を含んでいるのがまずいんではないかと。

簡単に言えば『切り出しましょう』につきます。
これは、クラスうんぬんプロジェクトうんぬんの前にモジュールの大原則からなるものです。勉強しましょう。

おそらくですが、仕様上のプロジェクトの配置ミスです。
強行しようとすると、かなり難しいことで悩むことになります。(それも後になればなるほど)

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