クラスが持つメソッドを取得する
とりあえず作業対象のクラスの一覧は入手しました。
けれど、対象となるメソッドの一覧がありません。
という状況なので、そのクラスのメソッドを一覧にして、タスクリストの元ネタにすることにしました。
作業対象のクラスはコンパイルエラーがある状態なので、コンパイルされたクラスとしてスタブのメソッドが実装された状態にしました。
全ては時の中に… : 【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