MethodBuilder Class
Defines and represents a method (or constructor) on a dynamic class.
System.Reflection.MemberInfo
System.Reflection.MethodBase
System.Reflection.MethodInfo
System.Reflection.Emit.MethodBuilder
Namespace: System.Reflection.Emit
Assembly: mscorlib (in mscorlib.dll)
The MethodBuilder type exposes the following members.
| Name | Description | |
|---|---|---|
![]() | Attributes | Retrieves the attributes for this method. (Overrides MethodBase.Attributes.) |
![]() | CallingConvention | Returns the calling convention of the method. (Overrides MethodBase.CallingConvention.) |
![]() | ContainsGenericParameters | Not supported for this type. (Overrides MethodBase.ContainsGenericParameters.) |
![]() | CustomAttributes | Gets a collection that contains this member's custom attributes. (Inherited from MemberInfo.) |
![]() | DeclaringType | Returns the type that declares this method. (Overrides MemberInfo.DeclaringType.) |
![]() | InitLocals | Gets or sets a Boolean value that specifies whether the local variables in this method are zero initialized. The default value of this property is true. |
![]() | IsAbstract | Gets a value indicating whether the method is abstract. (Inherited from MethodBase.) |
![]() | IsAssembly | Gets a value indicating whether the potential visibility of this method or constructor is described by MethodAttributes.Assembly; that is, the method or constructor is visible at most to other types in the same assembly, and is not visible to derived types outside the assembly. (Inherited from MethodBase.) |
![]() | IsConstructor | Gets a value indicating whether the method is a constructor. (Inherited from MethodBase.) |
![]() | IsFamily | Gets a value indicating whether the visibility of this method or constructor is described by MethodAttributes.Family; that is, the method or constructor is visible only within its class and derived classes. (Inherited from MethodBase.) |
![]() | IsFamilyAndAssembly | Gets a value indicating whether the visibility of this method or constructor is described by MethodAttributes.FamANDAssem; that is, the method or constructor can be called by derived classes, but only if they are in the same assembly. (Inherited from MethodBase.) |
![]() | IsFamilyOrAssembly | Gets a value indicating whether the potential visibility of this method or constructor is described by MethodAttributes.FamORAssem; that is, the method or constructor can be called by derived classes wherever they are, and by classes in the same assembly. (Inherited from MethodBase.) |
![]() | IsFinal | Gets a value indicating whether this method is final. (Inherited from MethodBase.) |
![]() | IsGenericMethod | Gets a value indicating whether the method is a generic method. (Overrides MethodBase.IsGenericMethod.) |
![]() | IsGenericMethodDefinition | Gets a value indicating whether the current MethodBuilder object represents the definition of a generic method. (Overrides MethodBase.IsGenericMethodDefinition.) |
![]() | IsHideBySig | Gets a value indicating whether only a member of the same kind with exactly the same signature is hidden in the derived class. (Inherited from MethodBase.) |
![]() | IsPrivate | Gets a value indicating whether this member is private. (Inherited from MethodBase.) |
![]() | IsPublic | Gets a value indicating whether this is a public method. (Inherited from MethodBase.) |
![]() | IsSecurityCritical | Throws a NotSupportedException in all cases. (Overrides MethodBase.IsSecurityCritical.) |
![]() | IsSecuritySafeCritical | Throws a NotSupportedException in all cases. (Overrides MethodBase.IsSecuritySafeCritical.) |
![]() | IsSecurityTransparent | Throws a NotSupportedException in all cases. (Overrides MethodBase.IsSecurityTransparent.) |
![]() | IsSpecialName | Gets a value indicating whether this method has a special name. (Inherited from MethodBase.) |
![]() | IsStatic | Gets a value indicating whether the method is static. (Inherited from MethodBase.) |
![]() | IsVirtual | Gets a value indicating whether the method is virtual. (Inherited from MethodBase.) |
![]() | MemberType | Gets a MemberTypes value indicating that this member is a method. (Inherited from MethodInfo.) |
![]() | MetadataToken | Gets a value that identifies a metadata element. (Inherited from MemberInfo.) |
![]() | MethodHandle | Retrieves the internal handle for the method. Use this handle to access the underlying metadata handle. (Overrides MethodBase.MethodHandle.) |
![]() | MethodImplementationFlags | Gets the MethodImplAttributes flags that specify the attributes of a method implementation. (Inherited from MethodBase.) |
![]() | Module | Gets the module in which the current method is being defined. (Overrides MemberInfo.Module.) |
![]() | Name | Retrieves the name of this method. (Overrides MemberInfo.Name.) |
![]() | ReflectedType | Retrieves the class that was used in reflection to obtain this object. (Overrides MemberInfo.ReflectedType.) |
![]() | ReturnParameter | Gets a ParameterInfo object that contains information about the return type of the method, such as whether the return type has custom modifiers. (Overrides MethodInfo.ReturnParameter.) |
![]() | ReturnType | Gets the return type of the method represented by this MethodBuilder. (Overrides MethodInfo.ReturnType.) |
![]() | ReturnTypeCustomAttributes | Returns the custom attributes of the method's return type. (Overrides MethodInfo.ReturnTypeCustomAttributes.) |
![]() | Signature | Retrieves the signature of the method. |
| Name | Description | |
|---|---|---|
![]() | AddDeclarativeSecurity | Adds declarative security to this method. |
![]() | CreateDelegate(Type) | Creates a delegate of the specified type from this method. (Inherited from MethodInfo.) |
![]() | CreateDelegate(Type, Object) | Creates a delegate of the specified type with the specified target from this method. (Inherited from MethodInfo.) |
![]() | CreateMethodBody | Creates the body of the method using a supplied byte array of Microsoft intermediate language (MSIL) instructions. |
![]() | DefineGenericParameters | Sets the number of generic type parameters for the current method, specifies their names, and returns an array of GenericTypeParameterBuilder objects that can be used to define their constraints. |
![]() | DefineParameter | Sets the parameter attributes and the name of a parameter of this method, or of the return value of this method. Returns a ParameterBuilder that can be used to apply custom attributes. |
![]() | Equals | Determines whether the given object is equal to this instance. (Overrides MethodInfo.Equals(Object).) |
![]() | GetBaseDefinition | Return the base implementation for a method. (Overrides MethodInfo.GetBaseDefinition().) |
![]() | GetCustomAttributes(Boolean) | Returns all the custom attributes defined for this method. (Overrides MemberInfo.GetCustomAttributes(Boolean).) |
![]() | GetCustomAttributes(Type, Boolean) | Returns the custom attributes identified by the given type. (Overrides MemberInfo.GetCustomAttributes(Type, Boolean).) |
![]() | GetCustomAttributesData | Returns a list of CustomAttributeData objects representing data about the attributes that have been applied to the target member. (Inherited from MemberInfo.) |
![]() | GetGenericArguments | Returns an array of GenericTypeParameterBuilder objects that represent the type parameters of the method, if it is generic. (Overrides MethodInfo.GetGenericArguments().) |
![]() | GetGenericMethodDefinition | Returns this method. (Overrides MethodInfo.GetGenericMethodDefinition().) |
![]() | GetHashCode | Gets the hash code for this method. (Overrides MethodInfo.GetHashCode().) |
![]() | GetILGenerator() | Returns an ILGenerator for this method with a default Microsoft intermediate language (MSIL) stream size of 64 bytes. |
![]() | GetILGenerator(Int32) | Returns an ILGenerator for this method with the specified Microsoft intermediate language (MSIL) stream size. |
![]() | GetMethodBody | When overridden in a derived class, gets a MethodBody object that provides access to the MSIL stream, local variables, and exceptions for the current method. (Inherited from MethodBase.) |
![]() | GetMethodImplementationFlags | Returns the implementation flags for the method. (Overrides MethodBase.GetMethodImplementationFlags().) |
![]() | GetModule | Returns a reference to the module that contains this method. |
![]() | GetParameters | Returns the parameters of this method. (Overrides MethodBase.GetParameters().) |
![]() | GetToken | Returns the MethodToken that represents the token for this method. |
![]() | GetType | Gets the Type of the current instance. (Inherited from Object.) |
![]() | Invoke(Object, Object[]) | Invokes the method or constructor represented by the current instance, using the specified parameters. (Inherited from MethodBase.) |
![]() | Invoke(Object, BindingFlags, Binder, Object[], CultureInfo) | Dynamically invokes the method reflected by this instance on the given object, passing along the specified parameters, and under the constraints of the given binder. (Overrides MethodBase.Invoke(Object, BindingFlags, Binder, Object[], CultureInfo).) |
![]() | IsDefined | Checks if the specified custom attribute type is defined. (Overrides MemberInfo.IsDefined(Type, Boolean).) |
![]() | MakeGenericMethod | Returns a generic method constructed from the current generic method definition using the specified generic type arguments. (Overrides MethodInfo.MakeGenericMethod(Type[]).) |
![]() | SetCustomAttribute(CustomAttributeBuilder) | Sets a custom attribute using a custom attribute builder. |
![]() | SetCustomAttribute(ConstructorInfo, Byte[]) | Sets a custom attribute using a specified custom attribute blob. |
![]() | SetImplementationFlags | Sets the implementation flags for this method. |
![]() | SetMarshal | Obsolete. Sets marshaling information for the return type of this method. |
![]() | SetMethodBody | Creates the body of the method by using a specified byte array of Microsoft intermediate language (MSIL) instructions. |
![]() | SetParameters | Sets the number and types of parameters for a method. |
![]() | SetReturnType | Sets the return type of the method. |
![]() | SetSignature | Sets the method signature, including the return type, the parameter types, and the required and optional custom modifiers of the return type and parameter types. |
![]() | SetSymCustomAttribute | Set a symbolic custom attribute using a blob. |
![]() | ToString | Returns this MethodBuilder instance as a string. (Overrides Object.ToString().) |
| Name | Description | |
|---|---|---|
![]() | GetCustomAttribute(Type) | Overloaded. Retrieves a custom attribute of a specified type that is applied to a specified member. (Defined by CustomAttributeExtensions.) |
![]() | GetCustomAttribute(Type, Boolean) | Overloaded. Retrieves a custom attribute of a specified type that is applied to a specified member, and optionally inspects the ancestors of that member. (Defined by CustomAttributeExtensions.) |
![]() | GetCustomAttribute<T>() | Overloaded. Retrieves a custom attribute of a specified type that is applied to a specified member. (Defined by CustomAttributeExtensions.) |
![]() | GetCustomAttribute<T>(Boolean) | Overloaded. Retrieves a custom attribute of a specified type that is applied to a specified member, and optionally inspects the ancestors of that member. (Defined by CustomAttributeExtensions.) |
![]() | GetCustomAttributes() | Overloaded. Retrieves a collection of custom attributes that are applied to a specified member. (Defined by CustomAttributeExtensions.) |
![]() | GetCustomAttributes(Type) | Overloaded. Retrieves a collection of custom attributes of a specified type that are applied to a specified member. (Defined by CustomAttributeExtensions.) |
![]() | GetCustomAttributes<T>() | Overloaded. Retrieves a collection of custom attributes of a specified type that are applied to a specified member. (Defined by CustomAttributeExtensions.) |
![]() | GetCustomAttributes<T>(Boolean) | Overloaded. Retrieves a collection of custom attributes of a specified type that are applied to a specified member, and optionally inspects the ancestors of that member. (Defined by CustomAttributeExtensions.) |
![]() | GetRuntimeBaseDefinition | Retrieves an object that represents the specified method on the direct or indirect base class where the method was first declared. (Defined by RuntimeReflectionExtensions.) |
![]() | IsDefined | Indicates whether custom attributes of a specified type are applied to a specified member. (Defined by CustomAttributeExtensions.) |
| Name | Description | |
|---|---|---|
![]() ![]() | _MemberInfo.GetIDsOfNames | Maps a set of names to a corresponding set of dispatch identifiers. (Inherited from MemberInfo.) |
![]() ![]() | _MemberInfo.GetType | Gets a Type object representing the MemberInfo class. (Inherited from MemberInfo.) |
![]() ![]() | _MemberInfo.GetTypeInfo | Retrieves the type information for an object, which can then be used to get the type information for an interface. (Inherited from MemberInfo.) |
![]() ![]() | _MemberInfo.GetTypeInfoCount | Retrieves the number of type information interfaces that an object provides (either 0 or 1). (Inherited from MemberInfo.) |
![]() ![]() | _MemberInfo.Invoke | Provides access to properties and methods exposed by an object. (Inherited from MemberInfo.) |
![]() ![]() | _MethodBase.GetIDsOfNames | Maps a set of names to a corresponding set of dispatch identifiers. (Inherited from MethodBase.) |
![]() ![]() | _MethodBase.GetType | For a description of this member, see _MethodBase.GetType. (Inherited from MethodBase.) |
![]() ![]() | _MethodBase.GetTypeInfo | Retrieves the type information for an object, which can then be used to get the type information for an interface. (Inherited from MethodBase.) |
![]() ![]() | _MethodBase.GetTypeInfoCount | Retrieves the number of type information interfaces that an object provides (either 0 or 1). (Inherited from MethodBase.) |
![]() ![]() | _MethodBase.Invoke | Provides access to properties and methods exposed by an object. (Inherited from MethodBase.) |
![]() ![]() | _MethodBase.IsAbstract | For a description of this member, see _MethodBase.IsAbstract. (Inherited from MethodBase.) |
![]() ![]() | _MethodBase.IsAssembly | For a description of this member, see _MethodBase.IsAssembly. (Inherited from MethodBase.) |
![]() ![]() | _MethodBase.IsConstructor | For a description of this member, see _MethodBase.IsConstructor. (Inherited from MethodBase.) |
![]() ![]() | _MethodBase.IsFamily | For a description of this member, see _MethodBase.IsFamily. (Inherited from MethodBase.) |
![]() ![]() | _MethodBase.IsFamilyAndAssembly | For a description of this member, see _MethodBase.IsFamilyAndAssembly. (Inherited from MethodBase.) |
![]() ![]() | _MethodBase.IsFamilyOrAssembly | For a description of this member, see _MethodBase.IsFamilyOrAssembly. (Inherited from MethodBase.) |
![]() ![]() | _MethodBase.IsFinal | For a description of this member, see _MethodBase.IsFinal. (Inherited from MethodBase.) |
![]() ![]() | _MethodBase.IsHideBySig | For a description of this member, see _MethodBase.IsHideBySig. (Inherited from MethodBase.) |
![]() ![]() | _MethodBase.IsPrivate | For a description of this member, see _MethodBase.IsPrivate. (Inherited from MethodBase.) |
![]() ![]() | _MethodBase.IsPublic | For a description of this member, see _MethodBase.IsPublic. (Inherited from MethodBase.) |
![]() ![]() | _MethodBase.IsSpecialName | For a description of this member, see _MethodBase.IsSpecialName. (Inherited from MethodBase.) |
![]() ![]() | _MethodBase.IsStatic | For a description of this member, see _MethodBase.IsStatic. (Inherited from MethodBase.) |
![]() ![]() | _MethodBase.IsVirtual | For a description of this member, see _MethodBase.IsVirtual. (Inherited from MethodBase.) |
![]() ![]() | _MethodBuilder.GetIDsOfNames | Maps a set of names to a corresponding set of dispatch identifiers. |
![]() ![]() | _MethodBuilder.GetTypeInfo | Retrieves the type information for an object, which can then be used to get the type information for an interface. |
![]() ![]() | _MethodBuilder.GetTypeInfoCount | Retrieves the number of type information interfaces that an object provides (either 0 or 1). |
![]() ![]() | _MethodBuilder.Invoke | Provides access to properties and methods exposed by an object. |
![]() ![]() | _MethodInfo.GetIDsOfNames | Maps a set of names to a corresponding set of dispatch identifiers. (Inherited from MethodInfo.) |
![]() ![]() | _MethodInfo.GetType | Provides access to the GetType method from COM. (Inherited from MethodInfo.) |
![]() ![]() | _MethodInfo.GetTypeInfo | Retrieves the type information for an object, which can be used to get the type information for an interface. (Inherited from MethodInfo.) |
![]() ![]() | _MethodInfo.GetTypeInfoCount | Retrieves the number of type information interfaces that an object provides (either 0 or 1). (Inherited from MethodInfo.) |
![]() ![]() | _MethodInfo.Invoke | Provides access to properties and methods exposed by an object. (Inherited from MethodInfo.) |
MethodBuilder is used to fully describe a method in Microsoft intermediate language (MSIL), including the name, attributes, signature, and method body. It is used in conjunction with the TypeBuilder class to create classes at runtime.
Note |
|---|
The HostProtectionAttribute attribute applied to this type or member has the following Resources property value: MayLeakOnAbort. The HostProtectionAttribute does not affect desktop applications (which are typically started by double-clicking an icon, typing a command, or entering a URL in a browser). For more information, see the HostProtectionAttribute class or SQL Server Programming and Host Protection Attributes. |
An example using the MethodBuilder class to create a method within a dynamic type is provided below.
using System; using System.Reflection; using System.Reflection.Emit; class DemoMethodBuilder { public static void AddMethodDynamically (TypeBuilder myTypeBld, string mthdName, Type[] mthdParams, Type returnType, string mthdAction) { MethodBuilder myMthdBld = myTypeBld.DefineMethod( mthdName, MethodAttributes.Public | MethodAttributes.Static, returnType, mthdParams); ILGenerator ILout = myMthdBld.GetILGenerator(); int numParams = mthdParams.Length; for (byte x=0; x < numParams; x++) { ILout.Emit(OpCodes.Ldarg_S, x); } if (numParams > 1) { for (int y=0; y<(numParams-1); y++) { switch (mthdAction) { case "A": ILout.Emit(OpCodes.Add); break; case "M": ILout.Emit(OpCodes.Mul); break; default: ILout.Emit(OpCodes.Add); break; } } } ILout.Emit(OpCodes.Ret); } public static void Main() { AppDomain myDomain = AppDomain.CurrentDomain; AssemblyName asmName = new AssemblyName(); asmName.Name = "MyDynamicAsm"; AssemblyBuilder myAsmBuilder = myDomain.DefineDynamicAssembly( asmName, AssemblyBuilderAccess.RunAndSave); ModuleBuilder myModule = myAsmBuilder.DefineDynamicModule("MyDynamicAsm", "MyDynamicAsm.dll"); TypeBuilder myTypeBld = myModule.DefineType("MyDynamicType", TypeAttributes.Public); // Get info from the user to build the method dynamically. Console.WriteLine("Let's build a simple method dynamically!"); Console.WriteLine("Please enter a few numbers, separated by spaces."); string inputNums = Console.ReadLine(); Console.Write("Do you want to [A]dd (default) or [M]ultiply these numbers? "); string myMthdAction = Console.ReadLine().ToUpper(); Console.Write("Lastly, what do you want to name your new dynamic method? "); string myMthdName = Console.ReadLine(); // Process inputNums into an array and create a corresponding Type array int index = 0; string[] inputNumsList = inputNums.Split(); Type[] myMthdParams = new Type[inputNumsList.Length]; object[] inputValsList = new object[inputNumsList.Length]; foreach (string inputNum in inputNumsList) { inputValsList[index] = (object)Convert.ToInt32(inputNum); myMthdParams[index] = typeof(int); index++; } // Now, call the method building method with the parameters, passing the // TypeBuilder by reference. AddMethodDynamically(myTypeBld, myMthdName, myMthdParams, typeof(int), myMthdAction); Type myType = myTypeBld.CreateType(); Console.WriteLine("---"); Console.WriteLine("The result of {0} the inputted values is: {1}", ((myMthdAction == "M") ? "multiplying" : "adding"), myType.InvokeMember(myMthdName, BindingFlags.InvokeMethod | BindingFlags.Public | BindingFlags.Static, null, null, inputValsList)); Console.WriteLine("---"); // Let's take a look at the method we created. // If you are interested in seeing the MSIL generated dynamically for the method // your program generated, change to the directory where you ran the compiled // code sample and type "ildasm MyDynamicAsm.dll" at the prompt. When the list // of manifest contents appears, click on "MyDynamicType" and then on the name of // of the method you provided during execution. myAsmBuilder.Save("MyDynamicAsm.dll"); MethodInfo myMthdInfo = myType.GetMethod(myMthdName); Console.WriteLine("Your Dynamic Method: {0};", myMthdInfo.ToString()); } }
Windows 8, Windows Server 2012, Windows 7, Windows Vista SP2, Windows Server 2008 (Server Core Role not supported), Windows Server 2008 R2 (Server Core Role supported with SP1 or later; Itanium not supported)
The .NET Framework does not support all versions of every platform. For a list of the supported versions, see .NET Framework System Requirements.

