TypeBuilder.MakePointerType 方法
定義
重要
部分資訊涉及發行前產品,在發行之前可能會有大幅修改。 Microsoft 對此處提供的資訊,不做任何明確或隱含的瑕疵擔保。
傳回 Type 物件,代表指向目前類型之 Unmanaged 指標的類型。
public:
override Type ^ MakePointerType();
public override Type MakePointerType ();
override this.MakePointerType : unit -> Type
Public Overrides Function MakePointerType () As Type
傳回
Type 物件,代表指向目前類型之 Unmanaged 指標的類型。
範例
下列程式代碼範例會建立動態模組、名為的 Sample
抽象類型,以及名為的 TestMethod
抽象方法。
TestMethod
ref
會採用 Visual Basic) 類型的參數 (ByRef
、型Sample
Sample
別的指標,以及類型的Sample
數位。 它會傳回 類型的 Sample
二維陣列。 程式代碼範例會將動態模組儲存至磁碟,因此您可以使用 Ildasm.exe (IL 反組譯程式) 來檢查它。
using System;
using System.Reflection;
using System.Reflection.Emit;
using Microsoft.VisualBasic;
public class Example
{
public static void Main()
{
// Define a dynamic assembly to contain the sample type. The
// assembly will not be run, but only saved to disk, so
// AssemblyBuilderAccess.Save is specified.
//
AppDomain myDomain = AppDomain.CurrentDomain;
AssemblyName myAsmName = new AssemblyName("MakeXxxTypeExample");
AssemblyBuilder myAssembly = myDomain.DefineDynamicAssembly(
myAsmName,
AssemblyBuilderAccess.Save);
// An assembly is made up of executable modules. For a single-
// module assembly, the module name and file name are the same
// as the assembly name.
//
ModuleBuilder myModule = myAssembly.DefineDynamicModule(
myAsmName.Name,
myAsmName.Name + ".dll");
// Define the sample type.
TypeBuilder myType = myModule.DefineType(
"Sample",
TypeAttributes.Public | TypeAttributes.Abstract);
// Define a method that takes a ref argument of type Sample,
// a pointer to type Sample, and an array of Sample objects. The
// method returns a two-dimensional array of Sample objects.
//
// To create this method, you need Type objects that represent the
// parameter types and the return type. Use the MakeByRefType,
// MakePointerType, and MakeArrayType methods to create the Type
// objects.
//
Type byRefMyType = myType.MakeByRefType();
Type pointerMyType = myType.MakePointerType();
Type arrayMyType = myType.MakeArrayType();
Type twoDimArrayMyType = myType.MakeArrayType(2);
// Create the array of parameter types.
Type[] parameterTypes = {byRefMyType, pointerMyType, arrayMyType};
// Define the abstract Test method. After you have compiled
// and run this code example code, you can use ildasm.exe
// to open MakeXxxTypeExample.dll, examine the Sample type,
// and verify the parameter types and return type of the
// TestMethod method.
//
MethodBuilder myMethodBuilder = myType.DefineMethod(
"TestMethod",
MethodAttributes.Abstract | MethodAttributes.Virtual
| MethodAttributes.Public,
twoDimArrayMyType,
parameterTypes);
// Create the type and save the assembly. For a single-file
// assembly, there is only one module to store the manifest
// information in.
//
myType.CreateType();
myAssembly.Save(myAsmName.Name + ".dll");
}
}
Imports System.Reflection
Imports System.Reflection.Emit
Public Class Example
Public Shared Sub Main()
' Define a dynamic assembly to contain the sample type. The
' assembly will not be run, but only saved to disk, so
' AssemblyBuilderAccess.Save is specified.
'
Dim myDomain As AppDomain = AppDomain.CurrentDomain
Dim myAsmName As New AssemblyName("MakeXxxTypeExample")
Dim myAssembly As AssemblyBuilder = myDomain.DefineDynamicAssembly( _
myAsmName, _
AssemblyBuilderAccess.Save)
' An assembly is made up of executable modules. For a single-
' module assembly, the module name and file name are the same
' as the assembly name.
'
Dim myModule As ModuleBuilder = myAssembly.DefineDynamicModule( _
myAsmName.Name, _
myAsmName.Name & ".dll")
' Define the sample type.
Dim myType As TypeBuilder = myModule.DefineType( _
"Sample", _
TypeAttributes.Public Or TypeAttributes.Abstract)
' Define a method that takes a ByRef argument of type Sample,
' a pointer to type Sample, and an array of Sample objects. The
' method returns a two-dimensional array of Sample objects.
'
' To create this method, you need Type objects that represent the
' parameter types and the return type. Use the MakeByRefType,
' MakePointerType, and MakeArrayType methods to create the Type
' objects.
'
Dim byRefMyType As Type = myType.MakeByRefType
Dim pointerMyType As Type = myType.MakePointerType
Dim arrayMyType As Type = myType.MakeArrayType
Dim twoDimArrayMyType As Type = myType.MakeArrayType(2)
' Create the array of parameter types.
Dim parameterTypes() As Type = _
{byRefMyType, pointerMyType, arrayMyType}
' Define the abstract Test method. After you have compiled
' and run this code example code, you can use ildasm.exe
' to open MakeXxxTypeExample.dll, examine the Sample type,
' and verify the parameter types and return type of the
' TestMethod method.
'
Dim myMethodBuilder As MethodBuilder = myType.DefineMethod( _
"TestMethod", _
MethodAttributes.Abstract Or MethodAttributes.Virtual _
Or MethodAttributes.Public, _
twoDimArrayMyType, _
parameterTypes)
' Create the type and save the assembly. For a single-file
' assembly, there is only one module to store the manifest
' information in.
'
myType.CreateType()
myAssembly.Save(myAsmName.Name & ".dll")
End Sub
End Class
備註
方法 MakePointerType 提供方法來產生參數清單的指標類型。
注意
如果目前的 TypeBuilder 代表 MyType
,則使用 Microsoft 中繼語言 (MSIL) 語法,則此方法傳回的類型會是 MyType*
。