}
}
+#region Sync with _MonoReflectionMethod in object-internals.h
[StructLayout(LayoutKind.Sequential)]
internal class RuntimeMethodInfo : MethodInfo
{
private string? name;
private Type? reftype;
#pragma warning restore 649
+#endregion
+ private string? toString;
internal BindingFlags BindingFlags
{
return Delegate.CreateDelegate(delegateType, target, this);
}
+ // copied from CoreCLR's RuntimeMethodInfo
public override string ToString()
{
- return ReturnType.FormatTypeName() + " " + FormatNameAndSig();
+ if (toString == null)
+ {
+ var sbName = new ValueStringBuilder(MethodNameBufferSize);
+
+ sbName.Append(ReturnType.FormatTypeName());
+ sbName.Append(' ');
+ sbName.Append(Name);
+
+ if (IsGenericMethod)
+ sbName.Append(RuntimeMethodHandle.ConstructInstantiation(this, TypeNameFormatFlags.FormatBasic));
+
+ sbName.Append('(');
+ AppendParameters(ref sbName, GetParameterTypes(), CallingConvention);
+ sbName.Append(')');
+
+ toString = sbName.ToString();
+ }
+
+ return toString;
}
internal RuntimeModule GetRuntimeModule()
public sealed override bool HasSameMetadataDefinitionAs(MemberInfo other) => HasSameMetadataDefinitionAsCore<RuntimeMethodInfo>(other);
}
-
+#region Sync with _MonoReflectionMethod in object-internals.h
[StructLayout(LayoutKind.Sequential)]
internal class RuntimeConstructorInfo : ConstructorInfo
{
private string? name;
private Type? reftype;
#pragma warning restore 649
+#endregion
+ private string? toString;
public override Module Module
{
return RuntimeMethodInfo.GetMethodBody(mhandle);
}
+ // copied from CoreCLR's RuntimeConstructorInfo
public override string ToString()
{
- StringBuilder sbName = new StringBuilder(Name);
- sbName.Append("Void ");
+ if (toString == null)
+ {
+ var sbName = new ValueStringBuilder(MethodNameBufferSize);
- sbName.Append('(');
- RuntimeParameterInfo.FormatParameters(sbName, GetParametersNoCopy(), CallingConvention);
- sbName.Append(')');
+ // "Void" really doesn't make sense here. But we'll keep it for compat reasons.
+ sbName.Append("Void ");
- return sbName.ToString();
+ sbName.Append(Name);
+
+ sbName.Append('(');
+ AppendParameters(ref sbName, GetParameterTypes(), CallingConvention);
+ sbName.Append(')');
+
+ toString = sbName.ToString();
+ }
+
+ return toString;
}
public override IList<CustomAttributeData> GetCustomAttributesData()