- PR -

文字列で指定したクラスのインスタンスを作成する方法

1
投稿者投稿内容
なつ
会議室デビュー日: 2005/08/19
投稿数: 5
投稿日時: 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での開発です。
じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2005-08-26 14:32
引用:

別プロジェクトにあるクラスを文字列で指定してインスタンスを作成する方法は、
上記では誤りなんでしょうか。


LoadFile しないといけなかったかな。



_________________
C# と VB.NET の入門サイト
じゃんぬねっと日誌
Hongliang
ぬし
会議室デビュー日: 2004/12/25
投稿数: 576
投稿日時: 2005-08-26 14:35
Type.GetType メソッド (String)の解説にあるとおり、名前空間を含む型名だけでは呼出元が属するアセンブリ(=exe/dll)とmscorlibに存在する型しか探索しません。
ほかのアセンブリを探索させるには、型名の後ろにアセンブリ名も書く必要があります。


[追記]
……Type.GetTypeはアセンブリ名を明示すればロードして無くても触れる位置にさえあれば良いようですねー。
実際にロードされるのは取得した型の何らかのメソッドを実行したときってのがよく分かりませんが。

[ メッセージ編集済み 編集者: Hongliang 編集日時 2005-08-26 14:46 ]
じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2005-08-26 14:46
引用:

ほかのアセンブリを探索させるには、型名の後ろにアセンブリ名も書く必要があります。


あ、アセンブリ名を指定するオーバーロードがあったのを忘れてました。(^-^;)
フォローさせちゃって、申し訳ありません。(*_ _)

# 最近のスレでも話題には出ていたのに、忘れてました... orz



_________________
C# と VB.NET の入門サイト
じゃんぬねっと日誌
Jitta
ぬし
会議室デビュー日: 2002/07/05
投稿数: 6267
お住まい・勤務地: 兵庫県・海手
投稿日時: 2005-08-26 22:11
検索しようよ。。。
「文字 インスタンス 作」での検索結果

この辺:
クラスのインスタンス化について。
文字列からインスタンス作成

スレッドディレクトリ > .NET Framework クラスライブラリ > リフレクション も参照。

_________________
なつ
会議室デビュー日: 2005/08/19
投稿数: 5
投稿日時: 2005-08-27 05:29
ご返信ありがとうございます。
型名の後ろにアセンブリ名を指定することで解決できました。
お世話になりました。
1

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