- PR -

クラスのインスタンス化について。

1
投稿者投稿内容
bon
会議室デビュー日: 2003/08/12
投稿数: 2
投稿日時: 2003-08-12 21:24
いつもお世話になっております。

C#で動的にクラスのインスタンス化を行おうとしているのですが、
方法がわからず実装できておりません。

通常クラス名が静的に決まっていたら
 (クラス名) Instance1 = new (クラス名)();
と記述すればよろしいかと思います。

ですが今回実装したいと考えているのは、
クラス名を定義ファイル等から取得し、
そのクラスをインスタンス化したいと考えおります。

その方法をどなたかご教授お願いできますでしょうか。
yoo
会議室デビュー日: 2003/04/03
投稿数: 12
投稿日時: 2003-08-12 22:16
Activatorを使ってはどうでしょうか?

System.Activator.CreateInstnce(アセンブリ名,Type名).Unwrap();

UnwrapメソッドがSystem.Objectを返してきます。

またはAppDomainクラスか。Activatorとすることは同じかもしれませんが。
mei
大ベテラン
会議室デビュー日: 2003/04/08
投稿数: 114
投稿日時: 2003-08-12 22:39
既に回答は出ていますが、実例を。

コード:
using System;
using System.Runtime.Remoting;
using System.Reflection;

class MyClass {
	[STAThread]
	static void Main(string[] args) {
		ObjectHandle h = Activator.CreateInstanceFrom(@"C:\WINDOWS\Microsoft.NET\Framework\v1.1.4322\System.Drawing.dll", "System.Drawing.Size");
		Console.WriteLine("- Activator -");
		Console.WriteLine(h.GetType());
		Console.WriteLine(h.Unwrap().GetType());


		Console.WriteLine("- Assembly -");
		Assembly asm = Assembly.LoadFrom(@"C:\WINDOWS\Microsoft.NET\Framework\v1.1.4322\System.Drawing.dll");
		object o = asm.CreateInstance("System.Drawing.Size");
		Console.WriteLine(o.GetType());
	}
}

bon
会議室デビュー日: 2003/08/12
投稿数: 2
投稿日時: 2003-08-12 23:05
yoo様、mei様

回答ありがとうございます。

サンプルコードもつけていただき、
とても助かりました!!
1

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