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;
15 namespace System.Reflection {
18 public abstract class MethodBase: MemberInfo {
20 [MethodImplAttribute (MethodImplOptions.InternalCall)]
21 public extern static MethodBase GetCurrentMethod ();
23 public static MethodBase GetMethodFromHandle(RuntimeMethodHandle handle)
28 public abstract MethodImplAttributes GetMethodImplementationFlags();
30 public abstract ParameterInfo[] GetParameters();
32 public Object Invoke(Object obj, Object[] parameters) {
33 return Invoke (obj, 0, null, parameters, null);
36 public abstract Object Invoke(Object obj, BindingFlags invokeAttr, Binder binder, Object[] parameters, CultureInfo culture);
38 protected MethodBase()
42 public abstract RuntimeMethodHandle MethodHandle { get; }
43 public abstract MethodAttributes Attributes { get; }
44 public virtual CallingConventions CallingConvention { get {return CallingConventions.Standard;} }
45 public Boolean IsPublic {
47 return (Attributes & MethodAttributes.MemberAccessMask) == MethodAttributes.Public;
50 public Boolean IsPrivate {
52 return (Attributes & MethodAttributes.MemberAccessMask) == MethodAttributes.Private;
55 public Boolean IsFamily {
57 return (Attributes & MethodAttributes.MemberAccessMask) == MethodAttributes.Family;
60 public Boolean IsAssembly {
62 return (Attributes & MethodAttributes.MemberAccessMask) == MethodAttributes.Assembly;
65 public Boolean IsFamilyAndAssembly {
67 return (Attributes & MethodAttributes.MemberAccessMask) == MethodAttributes.FamANDAssem;
70 public Boolean IsFamilyOrAssembly {
72 return (Attributes & MethodAttributes.MemberAccessMask) == MethodAttributes.FamORAssem;
75 public Boolean IsStatic {
77 return (Attributes & MethodAttributes.Static) != 0;
80 public Boolean IsFinal {
82 return (Attributes & MethodAttributes.Final) != 0;
85 public Boolean IsVirtual {
87 return (Attributes & MethodAttributes.Virtual) != 0;
90 public Boolean IsHideBySig {
92 return (Attributes & MethodAttributes.HideBySig) != 0;
95 public Boolean IsAbstract {
97 return (Attributes & MethodAttributes.Abstract) != 0;
100 public Boolean IsSpecialName {
102 int attr = (int)Attributes;
103 return (attr & (int)MethodAttributes.SpecialName) != 0;
106 public Boolean IsConstructor {
108 int attr = (int)Attributes;
109 return ((attr & (int)MethodAttributes.RTSpecialName) != 0
110 && (Name == ".ctor"));
114 internal virtual int get_next_table_index (object obj, int table, bool inc) {
115 if (this is MethodBuilder) {
116 MethodBuilder mb = (MethodBuilder)this;
117 return mb.get_next_table_index (obj, table, inc);
119 if (this is ConstructorBuilder) {
120 ConstructorBuilder mb = (ConstructorBuilder)this;
121 return mb.get_next_table_index (obj, table, inc);
123 throw new Exception ("Method is not a builder method");