S_a_k_Uの日記みたいなDB

~サクゥーと呼ばないで~

クラスが持つメソッドを取得する

とりあえず作業対象のクラスの一覧は入手しました。
けれど、対象となるメソッドの一覧がありません。
という状況なので、そのクラスのメソッドを一覧にして、タスクリストの元ネタにすることにしました。


作業対象のクラスはコンパイルエラーがある状態なので、コンパイルされたクラスとしてスタブのメソッドが実装された状態にしました。


全ては時の中に… : 【VB.NET】指定したクラスのメソッド一覧を取得する
を参考にして、クラス名は文字列で扱いたいため、クラスオブジェクトの取得を、Type.GetType(String)メソッドに変更しました。
クラス名の指定で「完全限定名(AssemblyQualifiedName)」となっており、Namespaceの前にプロジェクト名が必要となるようです。

Dim typ As Type = Type.GetType("プロジェクト名.Namespace.クラス名")

Type.GetType メソッド (String) (System)
Re[5]: Type.GetType でタイプが取得できない


下記のようなコードで、引数でクラス名を指定すると、イミディエイトにメソッドが出力されます。

    Private Sub PrintMethodList(ByVal className As System.String)

        ' クラスオブジェクトの取得
        Dim typ As Type = Type.GetType(className)
        ' クラスが持つメソッドの取得
        Dim methods As MethodInfo() = typ.GetMethods()

        ' メソッドのループ
        For Each method As MethodInfo In methods

      ' 出力文字列用変数
            Dim buf As New System.Text.StringBuilder()

      ' スコープの記述(Public, Private, Protected以外は対象外)
            If method.IsSpecialName Then
                Continue For
            End If
            If method.IsPublic Then
                buf.Append("Public ")
            ElseIf method.IsPrivate Then
                buf.Append("Private ")
            ElseIf method.IsFamily Then
                buf.Append("Protected ")
            End If

            ' メソッド名の記述
            buf.Append(method.Name + "(")

            ' 引数の記述
            Dim params As ParameterInfo() = method.GetParameters()
            Dim idx As Integer = 0
            For Each param As ParameterInfo In params
                If idx > 0 Then
                    buf.Append(", ")
                End If
                If param.IsOptional Then
                    buf.Append("Optional ")
                End If
                buf.Append(param.Name + " As " + param.ParameterType.ToString())
                If IsDBNull(param.DefaultValue.ToString()) = False And "".Equals(param.DefaultValue.ToString()) = False Then
                    buf.Append(" = " + param.DefaultValue.ToString())
                End If
                idx += 1
            Next
            buf.Append(")")

            ' 戻り値の記述
            If method.ReturnType.Equals(Type.GetType("System.Void")) = False Then
                buf.Append(" As " + method.ReturnType.ToString())
            End If

            ' イミディエイトに出力
            Debug.Print(className + vbTab + buf.ToString)

        Next
    End Sub