- PR -

【VB.NET】リフレクションでByref引数のメソッドをGetMethodできない

1
投稿者投稿内容
未記入
会議室デビュー日: 2006/07/14
投稿数: 8
投稿日時: 2006-07-14 18:14
NUnitを使って、リフレクションによるPrivateメソッドのテストをしています。

参照渡し引数のメソッドが、GetMethodできません。(Nothingが返ってくる)
値渡し(ByVal)に変えるとGetMethodできます。

ご教授お願いいたします。
----(呼出元はじめ)--------------
<Test()> _
Public Sub testByrefLong_test2()
Dim lng As Long

Dim infoType As Type = GetType(TestClass)

Dim methodInfo As Reflection.MethodInfo _
= infoType.GetMethod("testByrefLong", Reflection.BindingFlags.NonPublic Or Reflection.BindingFlags.Instance, Nothing, New Type() {GetType(Long)}, Nothing)

End Sub
----(呼出元おわり)--------------


----(呼出先はじめ)--------------
Public Class TestClass
Private Sub testByrefLong(ByRef lng As Long)

End Sub
End Class
----(呼出先おわり)--------------
じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2006-07-14 18:55
引用:

未記入さんの書き込み (2006-07-14 18:14) より:

参照渡し引数のメソッドが、GetMethodできません。(Nothingが返ってくる)
(snip)
New Type() {GetType(Long)},


ここの型が間違っているからです。
引数の型を、ByRef な Long にする必要があります。

コード:

    Private Sub MosaMosaAA()
        Dim infoType    As System.Type = GetType(TestClass)
        Dim methodInfo  As System.Reflection.MethodInfo

        methodInfo = infoType.GetMethod( _
            "ByRefMethod", _
            System.Reflection.BindingFlags.NonPublic Or _
            System.Reflection.BindingFlags.Instance,    _
            Nothing, _
            New Type() {System.Type.GetType("System.Int64&")}, _
            Nothing _
        )

        If Not methodInfo Is Nothing Then
            MessageBox.Show("取得できたよ : " & methodInfo.ToString())
        End If
    End Sub


このように、ByRef を示す型の最後には & をサフィックスとして付加します。
Long は、CLR 的には、System.Int64 ですので、"System.Int64&" になります。

_________________
C# と VB.NET の入門サイト
じゃんぬねっと日誌
未記入
会議室デビュー日: 2006/07/14
投稿数: 8
投稿日時: 2006-07-15 01:23
なるほどーw
過去ログになかったので、困っていたところです。
本当にありがとうございました!
1

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