- PR -

C#でグローバルな参照

1
投稿者投稿内容
和也さん
ベテラン
会議室デビュー日: 2006/02/09
投稿数: 78
投稿日時: 2006-07-06 17:32
すいませんC#で質問があるのですが・・・

Aアプリからコマンドライン引数を指定してBを呼び出しています
Bアプリはコマンドライン引数を取得して、処理を進めます

Bアプリが最初に取得した引数を、Cフォーム・Dフォーム・Eクラス等さまざまな場所で使用できるようにしたいのですが、
受け取った引数をどのようにセットすれば、どのフォーム・クラスでも参照できるようになるのか分かりません

VB.NETではモジュール(どこからでも参照できる変数集)を作成し、public XX as string 的なことで、参照できていたのですが・・・
じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2006-07-06 17:59
引用:

和也さんさんの書き込み (2006-07-06 17:32) より:

Bアプリが最初に取得した引数を、Cフォーム・Dフォーム・Eクラス等さまざまな場所で使用できるようにしたいのですが、


A と B は別アセンブリということですね。

引用:

受け取った引数をどのようにセットすれば、どのフォーム・クラスでも参照できるようになるのか分かりません


コマンドライン引数は関係ないと思います。
コマンドライン引数はあくまで System.String() です。

引用:

VB.NETではモジュール(どこからでも参照できる変数集)を作成し、public XX as string 的なことで、参照できていたのですが・・・


モジュールであるかどうかも関係ないですよね。
クラスでも静的に値を持つことができますから。

ちなみに、この場合でも同一インスタンスになりませんが、それでも良いのでしょうか?
同一インスタンスでないといけないのであれば、アセンブリを分けない方が賢明なのではないでしょうか。
(後者のような場合、分けてあるとややこしくなります)

# 質問内容を正しく理解していないようでしたら、申し訳ありません。

_________________
C# と VB.NET の入門サイト
じゃんぬねっと日誌
和也さん
ベテラン
会議室デビュー日: 2006/02/09
投稿数: 78
投稿日時: 2006-07-06 18:04
引用:

A と B は別アセンブリということですね。



はい、別アセンブリになります

引用:

ちなみに、この場合でも同一インスタンスになりませんが、それでも良いのでしょうか?
同一インスタンスでないといけないのであれば、アセンブリを分けない方が賢明なのではないでしょうか。
(後者のような場合、分けてあるとややこしくなります)



かまいません
開発上AはVB.NET、BはC#で作っています
宜しくお願いします
じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2006-07-06 18:44
引用:

和也さんさんの書き込み (2006-07-06 18:04) より:

かまいません
開発上AはVB.NET、BはC#で作っています


A と B に関連するところをクラス ライブラリにして参照してはいかがでしょうか?
場合によっては、A か B 自体を依存関係のあるクラス ライブラリにしても良いと思います。
(双方とも、単独で起動したい仕様である場合はこの限りではありません)

_________________
C# と VB.NET の入門サイト
じゃんぬねっと日誌
和也さん
ベテラン
会議室デビュー日: 2006/02/09
投稿数: 78
投稿日時: 2006-07-06 18:59
クラスライブラリにしてみようと思いますが、、

別クラスを参照するときに、「クラスライブラリ c = new クラスライブラリ();」のようにすると
格納されていた値が消えてしまいます

new しなくてもクラスライブラリの値が見える方法ってありますか?

また、

現在、1ソリューションの中に、VB.NETプロジェクトとC#プロジェクトがあります
VB.NETのフォームから、C#のフォームは呼べるのでしょうか?
C#プロジェクトから、VB.NETのモジュールが参照できれば話は解決するのですが、無理でしょうか?
じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2006-07-06 19:09
引用:

和也さんさんの書き込み (2006-07-06 18:59) より:

別クラスを参照するときに、「クラスライブラリ c = new クラスライブラリ();」のようにすると格納されていた値が消えてしまいます


別インスタンスを放り込むわけですから、理屈からいってそうなりますよね?

引用:

new しなくてもクラスライブラリの値が見える方法ってありますか?


考え方の方向性がちょっと間違っているかと思います。
1 度だけインスタンスを生成して、それを双方で参照できれば良いと考えてみてください。

これに関しては、「シングルトン」 について調べると、仕様によっては有益になるかと思います。

引用:

現在、1ソリューションの中に、VB.NETプロジェクトとC#プロジェクトがあります
VB.NETのフォームから、C#のフォームは呼べるのでしょうか?


アクセス修飾子が public であれば可能です。

引用:

C#プロジェクトから、VB.NETのモジュールが参照できれば話は解決するのですが、無理でしょうか?


VB のモジュールは、StandardModuleAttribute という属性を持つ クラス です。
それと、モジュールでなくとも、クラス内に静的なメンバとして持てば参照できますよ。

静的メンバは、C# であれば static、VB であれば Shared というキーワードになります。

_________________
C# と VB.NET の入門サイト
じゃんぬねっと日誌
囚人
ぬし
会議室デビュー日: 2005/08/13
投稿数: 1019
投稿日時: 2006-07-06 21:29
全然違う受け取り方をしたのですが、的外れかな?

コマンドライン引数で渡すという事は文字列ですよね?
コマンドライン引数限定で言えば Environment.CommandLine という便利なものがあります。

じゃんぬさんも仰ってますが、こんなのでも。
コード:
public class Global
{
	public static string CommandArgs;
}

class Program
{
	static void Main(string[] args)
	{
		Global.CommandArgs = args[ 1 ];
	}
}


_________________
囚人のジレンマな日々
1

スキルアップ/キャリアアップ(JOB@IT)