Sample code for C# method signature disassembler.
Well, you're kind of in luck today. I dabbled in writing my own object
browser a while back, and I still have the code. It's in VB, and this was
pre-generics, so you're not going to get exactly what you want (note the
TODO near the end) but it should be a start.
Private Function GetSignature(ByVal method As MethodInfo) As String
Dim firstParam As Boolean = True
' TODO: Don't hardcode the function open/close characters
Dim sigBuilder As StringBuilder = New StringBuilder(method.Name & "(")
Dim displayType As String
For Each param As ParameterInfo In method.GetParameters()
If param.ParameterType.FullName IsNot Nothing Then
Dim paramType As String = param.ParameterType.FullName
If paramType.EndsWith("&") Then
paramType = paramType.Substring(0, paramType.Length - 1)
End If
Select Case paramType.ToLower()
Case "system.object"
If m_viewStyle = ViewStyle.CSharp Then
displayType = "object"
Else
displayType = "Object"
End If
Case "system.string"
If m_viewStyle = ViewStyle.CSharp Then
displayType = "string"
Else
displayType = "String"
End If
Case "system.int32"
If m_viewStyle = ViewStyle.CSharp Then
displayType = "int"
Else
displayType = "Integer"
End If
Case "system.int16"
If m_viewStyle = ViewStyle.CSharp Then
displayType = "short"
Else
displayType = "Short"
End If
Case "system.byte"
If m_viewStyle = ViewStyle.CSharp Then
displayType = "byte"
Else
displayType = "Byte"
End If
Case "system.int64"
If m_viewStyle = ViewStyle.CSharp Then
displayType = "long"
Else
displayType = "Long"
End If
Case "system.boolean"
If m_viewStyle = ViewStyle.CSharp Then
displayType = "bool"
Else
displayType = "Boolean"
End If
Case "system.char"
If m_viewStyle = ViewStyle.CSharp Then
displayType = "char"
Else
displayType = "Char"
End If
Case "system.datetime"
If m_viewStyle = ViewStyle.CSharp Then
displayType = paramType ' No equivalent in C#
Else
displayType = "Date"
End If
Case "system.double"
If m_viewStyle = ViewStyle.CSharp Then
displayType = "double"
Else
displayType = "Double"
End If
Case "system.single"
If m_viewStyle = ViewStyle.CSharp Then
displayType = "float"
Else
displayType = "Single"
End If
Case "system.sbyte"
If m_viewStyle = ViewStyle.CSharp Then
displayType = "sbyte"
Else
displayType = "SByte"
End If
Case "system.uint32"
If m_viewStyle = ViewStyle.CSharp Then
displayType = "uint"
Else
displayType = "UInteger"
End If
Case "system.uint16"
If m_viewStyle = ViewStyle.CSharp Then
displayType = "ushort"
Else
displayType = "UShort"
End If
Case "system.uint64"
If m_viewStyle = ViewStyle.CSharp Then
displayType = "ulong"
Else
displayType = "ULong"
End If
Case "system.decimal"
If m_viewStyle = ViewStyle.CSharp Then
displayType = "decimal"
Else
displayType = paramType ' No equivalent in VB
End If
Case Else
displayType = paramType
End Select
If firstParam Then
firstParam = False
Else
sigBuilder.Append(", ")
End If
If m_viewStyle = ViewStyle.CSharp Then
If param.ParameterType.IsByRef Then
sigBuilder.Append("ref ")
ElseIf param.IsOut Then
sigBuilder.Append("out ")
End If
Else
If param.ParameterType.IsByRef Then
sigBuilder.Append("ByRef ")
End If
End If
sigBuilder.Append(displayType)
Else
' TODO: Handle generics
Return String.Empty
End If
Next
sigBuilder.Append(")")
Return sigBuilder.ToString()
End Function