2 // System.Reflection/MonoMethod.cs
3 // The class used to represent methods from the mono runtime.
6 // Paolo Molaro (lupus@ximian.com)
8 // (C) 2001 Ximian, Inc. http://www.ximian.com
12 using System.Globalization;
13 using System.Runtime.CompilerServices;
14 using System.Runtime.InteropServices;
16 namespace System.Reflection {
17 internal struct MonoMethodInfo {
21 internal MethodAttributes attrs;
22 internal MethodImplAttributes iattrs;
24 [MethodImplAttribute(MethodImplOptions.InternalCall)]
25 internal static extern void get_method_info (RuntimeMethodHandle handle, out MonoMethodInfo info);
27 [MethodImplAttribute(MethodImplOptions.InternalCall)]
28 internal static extern ParameterInfo[] get_parameter_info (RuntimeMethodHandle handle);
32 * Note: most of this class needs to be duplicated for the contructor, since
33 * the .NET reflection class hierarchy is so broken.
35 internal class MonoMethod : MethodInfo {
36 internal RuntimeMethodHandle mhandle;
39 public override MethodInfo GetBaseDefinition() {
40 return this; /* FIXME */
42 public override Type ReturnType {
45 MonoMethodInfo.get_method_info (mhandle, out info);
49 public override ICustomAttributeProvider ReturnTypeCustomAttributes {
53 public override MethodImplAttributes GetMethodImplementationFlags() {
55 MonoMethodInfo.get_method_info (mhandle, out info);
59 public override ParameterInfo[] GetParameters() {
60 return MonoMethodInfo.get_parameter_info (mhandle);
64 public override Object Invoke(Object obj, BindingFlags invokeAttr, Binder binder, Object[] parameters, CultureInfo culture) {
65 throw new NotImplementedException ();
68 public override RuntimeMethodHandle MethodHandle {
71 public override MethodAttributes Attributes {
74 MonoMethodInfo.get_method_info (mhandle, out info);
79 public override Type ReflectedType {
82 MonoMethodInfo.get_method_info (mhandle, out info);
86 public override Type DeclaringType {
89 MonoMethodInfo.get_method_info (mhandle, out info);
93 public override string Name {
96 MonoMethodInfo.get_method_info (mhandle, out info);
101 public override bool IsDefined (Type attribute_type, bool inherit) {
105 public override object[] GetCustomAttributes( bool inherit) {
108 public override object[] GetCustomAttributes( Type attributeType, bool inherit) {
112 public override string ToString () {
114 ParameterInfo[] p = GetParameters ();
115 for (int i = 0; i < p.Length; ++i) {
117 parms = parms + ", ";
118 parms = parms + p [i].ParameterType.Name;
120 return Name+"("+parms+")";
124 internal class MonoCMethod : ConstructorInfo {
125 internal RuntimeMethodHandle mhandle;
127 public override MethodImplAttributes GetMethodImplementationFlags() {
129 MonoMethodInfo.get_method_info (mhandle, out info);
133 public override ParameterInfo[] GetParameters() {
134 return MonoMethodInfo.get_parameter_info (mhandle);
137 public override Object Invoke(Object obj, BindingFlags invokeAttr, Binder binder, Object[] parameters, CultureInfo culture) {
138 throw new NotImplementedException ();
141 public override Object Invoke(BindingFlags invokeAttr, Binder binder, Object[] parameters, CultureInfo culture) {
142 throw new NotImplementedException ();
145 public override RuntimeMethodHandle MethodHandle {
146 get {return mhandle;}
148 public override MethodAttributes Attributes {
151 MonoMethodInfo.get_method_info (mhandle, out info);
156 public override Type ReflectedType {
159 MonoMethodInfo.get_method_info (mhandle, out info);
163 public override Type DeclaringType {
166 MonoMethodInfo.get_method_info (mhandle, out info);
170 public override string Name {
173 MonoMethodInfo.get_method_info (mhandle, out info);
179 public override bool IsDefined (Type attribute_type, bool inherit) {
184 public override object[] GetCustomAttributes (bool inherit) {
189 public override object[] GetCustomAttributes (Type attributeType, bool inherit) {