- - PR -
文字列で指定したクラスのインスタンスを作成する方法
1
投稿者 | 投稿内容 | ||||
---|---|---|---|---|---|
|
投稿日時: 2005-08-26 14:22
下記のようなケースの場合で質問です。
<1つ目のプロジェクト> プロジェクト名:MyProject1 名前空間:MyNamespace1 保有するクラス名:MyClass1 <2つ目のプロジェクト> プロジェクト名:MyProject2 名前空間:MyNamespace2 保有するクラス名:MyClass2 であるとき、MyClass2の中でMyNamespace1.MyClass1のTypeを取得するには Dim t As Type = t.GetType("MyNamespace1.MyClass1") のようになると思うのですが、上記のようにGetTypeするクラスMyClass2とMyNamespace1.MyClass1が別々のプロジェクトに存在する場合、 "オブジェクト参照がオブジェクト インスタンスに設定されていません。" のエラーが出てしまいます。 (MyProject1からMyProject2への参照を追加してもだめでした) 別プロジェクトにあるクラスを文字列で指定してインスタンスを作成する方法は、 上記では誤りなんでしょうか。 ご教授ください。 ちなみに、Windowsアプリケーション、VB.NETでの開発です。 | ||||
|
投稿日時: 2005-08-26 14:32
LoadFile しないといけなかったかな。 _________________ C# と VB.NET の入門サイト じゃんぬねっと日誌 | ||||
|
投稿日時: 2005-08-26 14:35
Type.GetType メソッド (String)の解説にあるとおり、名前空間を含む型名だけでは呼出元が属するアセンブリ(=exe/dll)とmscorlibに存在する型しか探索しません。
ほかのアセンブリを探索させるには、型名の後ろにアセンブリ名も書く必要があります。 [追記] ……Type.GetTypeはアセンブリ名を明示すればロードして無くても触れる位置にさえあれば良いようですねー。 実際にロードされるのは取得した型の何らかのメソッドを実行したときってのがよく分かりませんが。 [ メッセージ編集済み 編集者: Hongliang 編集日時 2005-08-26 14:46 ] | ||||
|
投稿日時: 2005-08-26 14:46
あ、アセンブリ名を指定するオーバーロードがあったのを忘れてました。(^-^;) フォローさせちゃって、申し訳ありません。(*_ _) # 最近のスレでも話題には出ていたのに、忘れてました... orz _________________ C# と VB.NET の入門サイト じゃんぬねっと日誌 | ||||
|
投稿日時: 2005-08-26 22:11
検索しようよ。。。
「文字 インスタンス 作」での検索結果 この辺: クラスのインスタンス化について。 文字列からインスタンス作成 スレッドディレクトリ > .NET Framework クラスライブラリ > リフレクション も参照。 _________________ | ||||
|
投稿日時: 2005-08-27 05:29
ご返信ありがとうございます。
型名の後ろにアセンブリ名を指定することで解決できました。 お世話になりました。 |
1