« コンソールで一部の文字列の文字色と背景色を変えるEchoコマンド拡張 | トップページ | ウィンドウアプリから非表示のコンソールウィンドウを開く。 »

2008年9月11日 (木)

.NETオブジェクトのオーバロードされたメソッドのサフィックスを調べる。

System.Text.StringBuilderなどの一部の.NETオブジェクトは、スクリプトなどから使えます。
しかし、オーバロードされたメソッドの呼び出しは、自動的には解決されません。
スクリプトからサフィックスで区別して呼び出す必要があります。
しかし、そのサフィックスはどうやって調べるのか?

ListMethods.exe 型名

ListMethods.exe system.text.stringbuilder

vbc ListMethods.VB

Imports System.Reflection
Imports System.Text
Imports System.Collections
Imports System
Imports Microsoft.VisualBasic

Public Class Class1
Public Shared Sub Main(ByVal Args() As String)
If Args.Length<>1 Then
  Console.WriteLine("Usage: ListMethods typename")
  Exit Sub
End If
Dim oType As Type = Type.GetType(Args(0),False,True)
If oType Is Nothing Then
  Console.WriteLine("Name not found - {0}",Args(0))
  Exit Sub
End If
Dim sList As SortedList = New SortedList
For Each Method As MethodInfo In oType.GetMethods()
  Dim sb As StringBuilder = New StringBuilder
  sb.Append(Method.Name)
  If sList.Contains(Method.Name) Then
    sb.Append("_")
    sb.Append(sList.Item(Method.Name).Count + 1)
  End If
  sb.Append("(")
  Dim pCount As Integer = 0
  For Each Parameter As ParameterInfo In Method.GetParameters()
    If pCount > 0 Then sb.Append(", ")
    If Parameter.IsOptional Then sb.Append("Optional ")
    sb.Append(Parameter.Name + " As " + Parameter.ParameterType.ToString())
    If Not IsDBNull(Parameter.DefaultValue.ToString()) AndAlso Parameter.DefaultValue.ToString().Length Then
      sb.Append(" = " + Parameter.DefaultValue.ToString())
    End If
    pCount += 1
  Next
  sb.Append(")")
  If Method.ReturnType.ToString()<>"System.Void" Then
    sb.Append(" As " + Method.ReturnType.ToString())
  End If
  If sList.Contains(Method.Name) Then
    sList.Item(Method.Name).Add(sb.ToString())
  Else
    Dim aList As ArrayList = New ArrayList
    aList.Add(sb.ToString())
    sList.Add(Method.Name,aList)
  End If
Next
For Each aList As ArrayList In sList.Values
  For Each Item As String In aList
    Console.WriteLine(Item)
  Next
Next
End Sub
End Class

« コンソールで一部の文字列の文字色と背景色を変えるEchoコマンド拡張 | トップページ | ウィンドウアプリから非表示のコンソールウィンドウを開く。 »