.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コマンド拡張 | トップページ | ウィンドウアプリから非表示のコンソールウィンドウを開く。 »