2 // System.Reflection/MethodBase.cs
5 // Paolo Molaro (lupus@ximian.com)
7 // (C) 2001 Ximian, Inc. http://www.ximian.com
11 using System.Globalization;
12 using System.Reflection.Emit;
13 using System.Runtime.CompilerServices;
14 using System.Runtime.InteropServices;
16 namespace System.Reflection {
19 [ClassInterface(ClassInterfaceType.AutoDual)]
20 public abstract class MethodBase: MemberInfo {
22 [MethodImplAttribute (MethodImplOptions.InternalCall)]
23 public extern static MethodBase GetCurrentMethod ();
25 public static MethodBase GetMethodFromHandle(RuntimeMethodHandle handle)
30 public abstract MethodImplAttributes GetMethodImplementationFlags();
32 public abstract ParameterInfo[] GetParameters();
37 public Object Invoke(Object obj, Object[] parameters) {
38 return Invoke (obj, 0, null, parameters, null);
41 public abstract Object Invoke(Object obj, BindingFlags invokeAttr, Binder binder, Object[] parameters, CultureInfo culture);
43 protected MethodBase()
47 public abstract RuntimeMethodHandle MethodHandle { get; }
48 public abstract MethodAttributes Attributes { get; }
49 public virtual CallingConventions CallingConvention { get {return CallingConventions.Standard;} }
50 public Boolean IsPublic {
52 return (Attributes & MethodAttributes.MemberAccessMask) == MethodAttributes.Public;
55 public Boolean IsPrivate {
57 return (Attributes & MethodAttributes.MemberAccessMask) == MethodAttributes.Private;
60 public Boolean IsFamily {
62 return (Attributes & MethodAttributes.MemberAccessMask) == MethodAttributes.Family;
65 public Boolean IsAssembly {
67 return (Attributes & MethodAttributes.MemberAccessMask) == MethodAttributes.Assembly;
70 public Boolean IsFamilyAndAssembly {
72 return (Attributes & MethodAttributes.MemberAccessMask) == MethodAttributes.FamANDAssem;
75 public Boolean IsFamilyOrAssembly {
77 return (Attributes & MethodAttributes.MemberAccessMask) == MethodAttributes.FamORAssem;
80 public Boolean IsStatic {
82 return (Attributes & MethodAttributes.Static) != 0;
85 public Boolean IsFinal {
87 return (Attributes & MethodAttributes.Final) != 0;
90 public Boolean IsVirtual {
92 return (Attributes & MethodAttributes.Virtual) != 0;
95 public Boolean IsHideBySig {
97 return (Attributes & MethodAttributes.HideBySig) != 0;
100 public Boolean IsAbstract {
102 return (Attributes & MethodAttributes.Abstract) != 0;
105 public Boolean IsSpecialName {
107 int attr = (int)Attributes;
108 return (attr & (int)MethodAttributes.SpecialName) != 0;
111 public Boolean IsConstructor {
113 int attr = (int)Attributes;
114 return ((attr & (int)MethodAttributes.RTSpecialName) != 0
115 && (Name == ".ctor"));
119 internal virtual int get_next_table_index (object obj, int table, bool inc) {
120 if (this is MethodBuilder) {
121 MethodBuilder mb = (MethodBuilder)this;
122 return mb.get_next_table_index (obj, table, inc);
124 if (this is ConstructorBuilder) {
125 ConstructorBuilder mb = (ConstructorBuilder)this;
126 return mb.get_next_table_index (obj, table, inc);
128 throw new Exception ("Method is not a builder method");