This is an abstract base class
representing executable method calls, which
fall into two categories: regular methods and constructors.
GetCurrentMethod( ) and
GetMethodFromHandle( ) are static methods that
return the currently executing method and a method represented by a
System.RuntimeMethodHandle object, respectively.
The MethodHandle returns the handle for a specific
method instance.
The properties prefixed by Is return boolean
values, allowing inspection of the modifiers of the reflected method.
Only some require explanation: IsAssembly returns
true if the method is internal, and
IsFamily returns true for protected methods. If a
member of exactly the same name and signature is hidden by a derived
class, IsHideBySig is true.
IsSpecialName indicates whether this method has a
special name, such as a property accessor,
get_PropertyName or
set_PropertyName.
Similarly, the attributes on a given method can be inspected from the
Attributes property. GetParameters(
) returns the parameters of a method or constructor, and
GetMethodImplementationFlags( ) returns the
MethodImplAttributes flags set on the method.
In addition to introspecting on a method, the
MethodBase also allows for reflective invocation
of a method, using the Invoke( ) method. Note that
Invoke( ) requires both the object instance
against which to invoke the method (or null if the
method is declared static), as well as an array of
object references containing the arguments to the
method, in their proper order. Should the argument array mismatch in
any way (wrong number of arguments, wrong type of arguments, wrong
order of arguments, and so on), an exception is thrown and the method
call is not even attempted. Method invocation in this manner is much
slower than direct compile-time-bound method execution.
public abstract class MethodBase : MemberInfo {
// Protected Constructors
protected MethodBase( );
// Public Instance Properties
public abstract MethodAttributes Attributes{get; }
public virtual CallingConventions CallingConvention{get; }
public bool IsAbstract{get; }
public bool IsAssembly{get; }
public bool IsConstructor{get; }
public bool IsFamily{get; }
public bool IsFamilyAndAssembly{get; }
public bool IsFamilyOrAssembly{get; }
public bool IsFinal{get; }
public bool IsHideBySig{get; }
public bool IsPrivate{get; }
public bool IsPublic{get; }
public bool IsSpecialName{get; }
public bool IsStatic{get; }
public bool IsVirtual{get; }
public abstract RuntimeMethodHandle MethodHandle{get; }
// Public Static Methods
public static MethodBase GetCurrentMethod( );
public static MethodBase GetMethodFromHandle(RuntimeMethodHandle handle);
// Public Instance Methods
public abstract MethodImplAttributes GetMethodImplementationFlags( );
public abstract ParameterInfo[ ] GetParameters( );
public abstract object Invoke(object obj, BindingFlags invokeAttr, Binder binder,
object[ ] parameters, System.Globalization.CultureInfo culture);
public object Invoke(object obj, object[ ] parameters);
}