- - PR -
【VB.NET】リフレクションでByref引数(クラスオブジェクト)のメソッドをGetMethodできない
1
投稿者 | 投稿内容 | ||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2006-07-20 15:49
前回
http://www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?topic=32128&forum=7 【VB.NET】リフレクションでByref引数のメソッドをGetMethodできない で、Long型のByref引数の件は回答いただきました。 では、クラスをNewしたオブジェクトがByref引数の場合はどうやればよろしいでしょうか? 重ねての質問ですみません。 よろしくお願いいたします。 | ||||||||||||
|
投稿日時: 2006-07-20 16:55
"クラスを New したオブジェクト" の意味が、ちょっとわからないのですが、 規定の .NET Framework にない、独自の型の場合という解釈でよろしいでしょうか? それと、環境は何でしょうか? .NET Framework 2.0 (VB8 | VB2005) であれば、
のように、MakeByRefType メソッドが使用できます。 1.x 以前でも、前スレッド同様に取得できます。
もしかして、別のアセンブリの型を呼び出したいという意味でしょうか? であれば、System.Reflection.Assembly クラスについて調べてみてください。 _________________ C# と VB.NET の入門サイト じゃんぬねっと日誌 | ||||||||||||
|
投稿日時: 2006-07-20 20:44
いつもありがとうございます!
ご指摘のとおり 別のアセンブリの型を呼び出したいという意味です。 New System.Type() {System.Type.GetType("Jeanne.Nullable.DateTime&")} ↑ 参考にして、アセンブリのネームスペースを指定して最後に&をつけてやってみました。 「System.ArgumentNullException : 値を Null にすることはできません。」 という例外が発生してしまいました。 なにぶん素人ですみません。 再度ご教授願えますでしょうか? | ||||||||||||
|
投稿日時: 2006-07-20 20:50
ちなみに、
.NET Framework v1.1です。 | ||||||||||||
|
投稿日時: 2006-07-20 20:53
これは、System.Type.GetType メソッドの戻り値が、Nothing だからです。 単純に型が取れていないということです。(別アセンブリであれば、当然取れません)
System.Reflection.Assembly クラスについては調べましたか? どのメンバが使えそうか、見当は尽きませんでしたか? _________________ C# と VB.NET の入門サイト じゃんぬねっと日誌 | ||||||||||||
|
投稿日時: 2006-07-21 09:26
Typeを拾えました!
これでByref引数が他のアセンブリ型の場合でも問題なく動きました。 Dim asm As [Assembly] = System.Reflection.Assembly.GetAssembly(GetType(Jeanne.Nullable.DateTime)) Dim typ() As Type = New System.Type() {asm.GetType("Jeanne.Nullable.DateTime&")} 例題に置き換えるとこんな感じでしょうか。 ありがとうございました!(お手数おかけしました。。) | ||||||||||||
|
投稿日時: 2006-07-21 11:19
個人的には、v2.0で追加されたようなメソッドを自分で作るほうがお勧めかな。
※もちろん直に書いてもできることはできますが。 たとえば、
みたいなのを作っておいて、 Type refType = MakeByRefType(typeof(MyType)); とか。 要は元のTypeを求めておいて、その型の参照型を作成するという流れです。 |
1