ModuleBuilder 类
定义
重要
一些信息与预发行产品相关,相应产品在发行之前可能会进行重大修改。 对于此处提供的信息,Microsoft 不作任何明示或暗示的担保。
定义和表示动态程序集中的模块。
public ref class ModuleBuilder : System::Reflection::Module
public ref class ModuleBuilder abstract : System::Reflection::Module
public ref class ModuleBuilder : System::Reflection::Module, System::Runtime::InteropServices::_ModuleBuilder
public class ModuleBuilder : System.Reflection.Module
public abstract class ModuleBuilder : System.Reflection.Module
[System.Runtime.InteropServices.ClassInterface(System.Runtime.InteropServices.ClassInterfaceType.None)]
public class ModuleBuilder : System.Reflection.Module, System.Runtime.InteropServices._ModuleBuilder
[System.Runtime.InteropServices.ClassInterface(System.Runtime.InteropServices.ClassInterfaceType.None)]
[System.Runtime.InteropServices.ComVisible(true)]
public class ModuleBuilder : System.Reflection.Module, System.Runtime.InteropServices._ModuleBuilder
type ModuleBuilder = class
inherit Module
[<System.Runtime.InteropServices.ClassInterface(System.Runtime.InteropServices.ClassInterfaceType.None)>]
type ModuleBuilder = class
inherit Module
interface _ModuleBuilder
[<System.Runtime.InteropServices.ClassInterface(System.Runtime.InteropServices.ClassInterfaceType.None)>]
[<System.Runtime.InteropServices.ComVisible(true)>]
type ModuleBuilder = class
inherit Module
interface _ModuleBuilder
Public Class ModuleBuilder
Inherits Module
Public MustInherit Class ModuleBuilder
Inherits Module
Public Class ModuleBuilder
Inherits Module
Implements _ModuleBuilder
- 继承
- 属性
- 实现
示例
下面的代码示例演示如何使用 ModuleBuilder
创建动态模块。 请注意,ModuleBuilder 是通过调用 AssemblyBuilder中的 DefineDynamicModule 而不是通过构造函数创建的。
using namespace System;
using namespace System::Reflection;
using namespace System::Reflection::Emit;
public ref class CodeGenerator
{
private:
AssemblyBuilder^ myAssemblyBuilder;
public:
CodeGenerator()
{
// Get the current application domain for the current thread.
AppDomain^ myCurrentDomain = AppDomain::CurrentDomain;
AssemblyName^ myAssemblyName = gcnew AssemblyName;
myAssemblyName->Name = "TempAssembly";
// Define a dynamic assembly in the current application domain.
myAssemblyBuilder = myCurrentDomain->DefineDynamicAssembly( myAssemblyName, AssemblyBuilderAccess::Run );
// Define a dynamic module in this assembly.
ModuleBuilder^ myModuleBuilder = myAssemblyBuilder->DefineDynamicModule( "TempModule" );
// Define a runtime class with specified name and attributes.
TypeBuilder^ myTypeBuilder = myModuleBuilder->DefineType( "TempClass", TypeAttributes::Public );
// Add 'Greeting' field to the class, with the specified attribute and type.
FieldBuilder^ greetingField = myTypeBuilder->DefineField( "Greeting", String::typeid, FieldAttributes::Public );
array<Type^>^myMethodArgs = {String::typeid};
// Add 'MyMethod' method to the class, with the specified attribute and signature.
MethodBuilder^ myMethod = myTypeBuilder->DefineMethod( "MyMethod", MethodAttributes::Public, CallingConventions::Standard, nullptr, myMethodArgs );
ILGenerator^ methodIL = myMethod->GetILGenerator();
methodIL->EmitWriteLine( "In the method..." );
methodIL->Emit( OpCodes::Ldarg_0 );
methodIL->Emit( OpCodes::Ldarg_1 );
methodIL->Emit( OpCodes::Stfld, greetingField );
methodIL->Emit( OpCodes::Ret );
myTypeBuilder->CreateType();
}
property AssemblyBuilder^ MyAssembly
{
AssemblyBuilder^ get()
{
return this->myAssemblyBuilder;
}
}
};
int main()
{
CodeGenerator^ myCodeGenerator = gcnew CodeGenerator;
// Get the assembly builder for 'myCodeGenerator' object.
AssemblyBuilder^ myAssemblyBuilder = myCodeGenerator->MyAssembly;
// Get the module builder for the above assembly builder object .
ModuleBuilder^ myModuleBuilder = myAssemblyBuilder->GetDynamicModule( "TempModule" );
Console::WriteLine( "The fully qualified name and path to this module is :{0}", myModuleBuilder->FullyQualifiedName );
Type^ myType = myModuleBuilder->GetType( "TempClass" );
MethodInfo^ myMethodInfo = myType->GetMethod( "MyMethod" );
// Get the token used to identify the method within this module.
MethodToken myMethodToken = myModuleBuilder->GetMethodToken( myMethodInfo );
Console::WriteLine( "Token used to identify the method of 'myType'"
" within the module is {0:x}", myMethodToken.Token );
array<Object^>^args = {"Hello."};
Object^ myObject = Activator::CreateInstance( myType, nullptr, nullptr );
myMethodInfo->Invoke( myObject, args );
}
using System;
using System.Reflection;
using System.Reflection.Emit;
using System.Security.Permissions;
public class CodeGenerator
{
AssemblyBuilder myAssemblyBuilder;
public CodeGenerator()
{
// Get the current application domain for the current thread.
AppDomain myCurrentDomain = AppDomain.CurrentDomain;
AssemblyName myAssemblyName = new AssemblyName();
myAssemblyName.Name = "TempAssembly";
// Define a dynamic assembly in the current application domain.
myAssemblyBuilder = myCurrentDomain.DefineDynamicAssembly
(myAssemblyName, AssemblyBuilderAccess.Run);
// Define a dynamic module in this assembly.
ModuleBuilder myModuleBuilder = myAssemblyBuilder.
DefineDynamicModule("TempModule");
// Define a runtime class with specified name and attributes.
TypeBuilder myTypeBuilder = myModuleBuilder.DefineType
("TempClass",TypeAttributes.Public);
// Add 'Greeting' field to the class, with the specified attribute and type.
FieldBuilder greetingField = myTypeBuilder.DefineField("Greeting",
typeof(String), FieldAttributes.Public);
Type[] myMethodArgs = { typeof(String) };
// Add 'MyMethod' method to the class, with the specified attribute and signature.
MethodBuilder myMethod = myTypeBuilder.DefineMethod("MyMethod",
MethodAttributes.Public, CallingConventions.Standard, null,myMethodArgs);
ILGenerator methodIL = myMethod.GetILGenerator();
methodIL.EmitWriteLine("In the method...");
methodIL.Emit(OpCodes.Ldarg_0);
methodIL.Emit(OpCodes.Ldarg_1);
methodIL.Emit(OpCodes.Stfld, greetingField);
methodIL.Emit(OpCodes.Ret);
myTypeBuilder.CreateType();
}
public AssemblyBuilder MyAssembly
{
get
{
return this.myAssemblyBuilder;
}
}
}
public class TestClass
{
public static void Main()
{
CodeGenerator myCodeGenerator = new CodeGenerator();
// Get the assembly builder for 'myCodeGenerator' object.
AssemblyBuilder myAssemblyBuilder = myCodeGenerator.MyAssembly;
// Get the module builder for the above assembly builder object .
ModuleBuilder myModuleBuilder = myAssemblyBuilder.
GetDynamicModule("TempModule");
Console.WriteLine("The fully qualified name and path to this "
+ "module is :" +myModuleBuilder.FullyQualifiedName);
Type myType = myModuleBuilder.GetType("TempClass");
MethodInfo myMethodInfo =
myType.GetMethod("MyMethod");
// Get the token used to identify the method within this module.
MethodToken myMethodToken =
myModuleBuilder.GetMethodToken(myMethodInfo);
Console.WriteLine("Token used to identify the method of 'myType'"
+ " within the module is {0:x}",myMethodToken.Token);
object[] args={"Hello."};
object myObject = Activator.CreateInstance(myType,null,null);
myMethodInfo.Invoke(myObject,args);
}
}
Imports System.Reflection
Imports System.Reflection.Emit
Imports System.Security.Permissions
Public Class CodeGenerator
Private myAssemblyBuilder As AssemblyBuilder
Public Sub New()
' Get the current application domain for the current thread.
Dim myCurrentDomain As AppDomain = AppDomain.CurrentDomain
Dim myAssemblyName As New AssemblyName()
myAssemblyName.Name = "TempAssembly"
' Define a dynamic assembly in the current application domain.
myAssemblyBuilder = _
myCurrentDomain.DefineDynamicAssembly(myAssemblyName, AssemblyBuilderAccess.Run)
' Define a dynamic module in this assembly.
Dim myModuleBuilder As ModuleBuilder = myAssemblyBuilder.DefineDynamicModule("TempModule")
' Define a runtime class with specified name and attributes.
Dim myTypeBuilder As TypeBuilder = _
myModuleBuilder.DefineType("TempClass", TypeAttributes.Public)
' Add 'Greeting' field to the class, with the specified attribute and type.
Dim greetingField As FieldBuilder = _
myTypeBuilder.DefineField("Greeting", GetType(String), FieldAttributes.Public)
Dim myMethodArgs As Type() = {GetType(String)}
' Add 'MyMethod' method to the class, with the specified attribute and signature.
Dim myMethod As MethodBuilder = _
myTypeBuilder.DefineMethod("MyMethod", MethodAttributes.Public, _
CallingConventions.Standard, Nothing, myMethodArgs)
Dim methodIL As ILGenerator = myMethod.GetILGenerator()
methodIL.EmitWriteLine("In the method...")
methodIL.Emit(OpCodes.Ldarg_0)
methodIL.Emit(OpCodes.Ldarg_1)
methodIL.Emit(OpCodes.Stfld, greetingField)
methodIL.Emit(OpCodes.Ret)
myTypeBuilder.CreateType()
End Sub
Public ReadOnly Property MyAssembly() As AssemblyBuilder
Get
Return Me.myAssemblyBuilder
End Get
End Property
End Class
Public Class TestClass
<PermissionSetAttribute(SecurityAction.Demand, Name:="FullTrust")> _
Public Shared Sub Main()
Dim myCodeGenerator As New CodeGenerator()
' Get the assembly builder for 'myCodeGenerator' object.
Dim myAssemblyBuilder As AssemblyBuilder = myCodeGenerator.MyAssembly
' Get the module builder for the above assembly builder object .
Dim myModuleBuilder As ModuleBuilder = myAssemblyBuilder.GetDynamicModule("TempModule")
Console.WriteLine("The fully qualified name and path to this " + _
"module is :" + myModuleBuilder.FullyQualifiedName)
Dim myType As Type = myModuleBuilder.GetType("TempClass")
Dim myMethodInfo As MethodInfo = myType.GetMethod("MyMethod")
' Get the token used to identify the method within this module.
Dim myMethodToken As MethodToken = myModuleBuilder.GetMethodToken(myMethodInfo)
Console.WriteLine("Token used to identify the method of 'myType'" + _
" within the module is {0:x}", myMethodToken.Token)
Dim args As Object() = {"Hello."}
Dim myObject As Object = Activator.CreateInstance(myType, Nothing, Nothing)
myMethodInfo.Invoke(myObject, args)
End Sub
End Class
注解
若要获取 ModuleBuilder实例,请使用 AssemblyBuilder.DefineDynamicModule 方法。
构造函数
ModuleBuilder() |
初始化 ModuleBuilder 类的新实例。 |
属性
Assembly |
获取定义此 ModuleBuilder实例的动态程序集。 |
Assembly | (继承自 Module) |
CustomAttributes |
获取包含此模块的自定义属性的集合。 (继承自 Module) |
FullyQualifiedName |
获取表示此模块的完全限定名称和路径的 |
MDStreamVersion |
获取元数据流版本。 |
MDStreamVersion |
获取元数据流版本。 (继承自 Module) |
MetadataToken |
获取标识元数据中当前动态模块的令牌。 |
MetadataToken |
获取标识元数据中的模块的令牌。 (继承自 Module) |
ModuleHandle |
获取模块的句柄。 (继承自 Module) |
ModuleVersionId |
获取可用于区分模块的两个版本的通用唯一标识符(UUID)。 |
ModuleVersionId |
获取可用于区分模块的两个版本的通用唯一标识符(UUID)。 (继承自 Module) |
Name |
一个字符串,指示这是内存中模块。 |
Name |
获取一个 |
ScopeName |
获取表示动态模块名称的字符串。 |
ScopeName |
获取表示模块名称的字符串。 (继承自 Module) |
方法
显式接口实现
扩展方法
GetCustomAttribute(Module, Type) |
检索应用于指定模块的指定类型的自定义属性。 |
GetCustomAttribute<T>(Module) |
检索应用于指定模块的指定类型的自定义属性。 |
GetCustomAttributes(Module) |
检索应用于指定模块的自定义属性的集合。 |
GetCustomAttributes(Module, Type) |
检索应用于指定模块的指定类型的自定义属性的集合。 |
GetCustomAttributes<T>(Module) |
检索应用于指定模块的指定类型的自定义属性的集合。 |
IsDefined(Module, Type) |
指示指定类型的自定义属性是否应用于指定的模块。 |
GetModuleVersionId(Module) |
定义和表示动态程序集中的模块。 |
HasModuleVersionId(Module) |
定义和表示动态程序集中的模块。 |