C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[2]: namespace を変数で扱うには


(過去ログ 135 を表示中)

[トピック内 3 記事 (1 - 3 表示)]  << 0 >>

■79668 / inTopicNo.1)  namespace を変数で扱うには
  
□投稿者/ たけ (1回)-(2016/04/27(Wed) 17:06:24)

分類:[C#] 

下記の様にメソッドの戻り値として namespace を返す事はできるのでしょうか?
単純に好奇心から知りたいです。

環境:
	VS C# framework3.5 



namespace hoge
{
	void test()
	{
		xxxx  ns;		// namespaceが設定できる変数

		// namespace を判別する
		int type = 1;
		switch (type)
		{
			case 1: ns = ns1; break;
			case 2: ns = ns2; break;
		}

		// 上で取得した namespace の NsTestクラスを作成
		ns.NsTest = new ns.NsTest();

		// メッセージを出力する
		Console.WriteLine(ns.Message);
		// Output "namespace1"
	}
}

namespace ns
{
	interface INsTest
	{
		string Message { get; }
	}
}


namespace ns1
{
	class NsTest : ns.INsTest
	{
		public string Message
		{
			get { return "namespace1"; }
		}
	}
}


namespace ns2
{
	class NsTest : ns.INsTest
	{
		public string Message
		{
			get { return "namespace2"; }
		}
	}
}



--------------------------------------
下記の様にすればできる事は分かっています。
int type = 1;
INsTest nt;
switch (type)
{
	case 1: nt = new ns.NsTest(); break;
	case 2: nt = new ns.NsTest(); break;
}
Console.WriteLine(ns.Message);
// Output "namespace1"




引用返信 編集キー/
■79673 / inTopicNo.2)  Re[1]: namespace を変数で扱うには
□投稿者/ Azulean (636回)-(2016/04/27(Wed) 22:20:05)
No79668 (たけ さん) に返信
> 下記の様にメソッドの戻り値として namespace を返す事はできるのでしょうか?
> 単純に好奇心から知りたいです。

名前空間という概念を返すことはできません。


類似手法として考えられるのは以下のものがありますね。

・「型の名前」を返すことで、Activator.CreateInstance などのリフレクション的な手法でオブジェクトを生成する。
・Func<ns.INsTest> というように、デリゲートで生成方法を覆い隠し、以降のコードを共通化する。
・FactoryClass<T> というようにジェネリックなクラスを使って生成方法を覆い隠し、以降のコードを共通化する。
引用返信 編集キー/
■79677 / inTopicNo.3)  Re[2]: namespace を変数で扱うには
□投稿者/ PANG2 (119回)-(2016/04/28(Thu) 13:25:46)
文字列型で、

string ns = ""; // namespaceが設定できる変数

// namespace を判別する
int type = 1;
switch (type) {
case 1: ns = "ns1";break;
case 2: ns = "ns2";break;
}

// 上で取得した namespace の NsTestクラスを作成
ns.INsTest NsTest = (ns.INsTest)Activator.CreateInstance(Type.GetType(ns + ".NsTest"));

// メッセージを出力する
Console.WriteLine(NsTest.Message);
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -