GenericTypeParameterBuilder.MakePointerType メソッド
定義
重要
一部の情報は、リリース前に大きく変更される可能性があるプレリリースされた製品に関するものです。 Microsoft は、ここに記載されている情報について、明示または黙示を問わず、一切保証しません。
現在のジェネリック型パラメーターを指すポインターを表す Type オブジェクトを返します。
public:
override Type ^ MakePointerType();
public override Type MakePointerType ();
override this.MakePointerType : unit -> Type
Public Overrides Function MakePointerType () As Type
戻り値
現在のジェネリック型パラメーターを指すポインターを表す Type オブジェクト。
例
次のコード例では、動的モジュール、という名前 Sample
の抽象ジェネリック型と、1 つの型パラメーター 、 T
という抽象メソッド TestMethod
を作成します。
TestMethod
型の ref
パラメーター (ByRef
Visual Basic では )、型 T
への T
ポインター、および の T
配列を受け取ります。 このメソッドは、 の 2 次元配列 T
を返します。 このコード例では、動的モジュールをディスクに保存するため、MSIL 逆アセンブラー (Ildasm.exe) を使用して調べることができます。
using namespace System;
using namespace System::Reflection;
using namespace System::Reflection::Emit;
int 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^ appDomain = AppDomain::CurrentDomain;
AssemblyName^ assemblyName = gcnew
AssemblyName("MakeXxxGenericTypeParameterExample");
AssemblyBuilder^ assemblyBuilder = appDomain->DefineDynamicAssembly
(assemblyName, 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^ moduleBuilder = assemblyBuilder->DefineDynamicModule
(assemblyName->Name, assemblyName->Name + ".dll");
// Define the sample type.
TypeBuilder^ typeBuilder = moduleBuilder->DefineType("Sample",
TypeAttributes::Public | TypeAttributes::Abstract);
// Make the sample type a generic type, by defining a type
// parameter T. All type parameters are defined at the same
// time, by passing an array containing the type parameter
// names.
array<String^>^ typeParamNames = {"T"};
array<GenericTypeParameterBuilder^>^ typeParams =
typeBuilder->DefineGenericParameters(typeParamNames);
// Define a method that takes a ByRef argument of type T, a
// pointer to type T, and one-dimensional array of type T.
// The method returns a two-dimensional array of type T.
//
// To create this method, you need Type objects that repre-
// sent the parameter types and the return type. Use the
// MakeByRefType, MakePointerType, and MakeArrayType methods
// to create the Type objects, using the generic type para-
// meter T.
//
Type^ byRefType = typeParams[0]->MakeByRefType();
Type^ pointerType = typeParams[0]->MakePointerType();
Type^ arrayType = typeParams[0]->MakeArrayType();
Type^ twoDimArrayType = typeParams[0]->MakeArrayType(2);
// Create the array of parameter types.
array<Type^>^ parameterTypes = {byRefType, pointerType, arrayType};
// Define the abstract Test method. After you have compiled
// and run this example code, you can use ildasm.exe to open
// MakeXxxGenericTypeParameterExample.dll, examine the Sample
// type, and verify the parameter types and return type of
// the TestMethod method.
//
MethodBuilder^ methodBuilder = typeBuilder->DefineMethod("TestMethod",
MethodAttributes::Abstract | MethodAttributes::Virtual
| MethodAttributes::Public, twoDimArrayType, parameterTypes);
// Create the type and save the assembly. For a single-file
// assembly, there is only one module to store the manifest
// information in.
//
typeBuilder->CreateType();
assemblyBuilder->Save(assemblyName->Name + ".dll");
};
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("MakeXxxGenericTypeParameterExample");
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);
// Make the sample type a generic type, by defining a type
// parameter T. All type parameters are defined at the same
// time, by passing an array containing the type parameter
// names.
string[] typeParamNames = {"T"};
GenericTypeParameterBuilder[] typeParams =
myType.DefineGenericParameters(typeParamNames);
// Define a method that takes a ByRef argument of type T, a
// pointer to type T, and one-dimensional array of type T. The
// method returns a two-dimensional array of type T.
//
// 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, using the generic type parameter T.
//
Type byRefType = typeParams[0].MakeByRefType();
Type pointerType = typeParams[0].MakePointerType();
Type arrayType = typeParams[0].MakeArrayType();
Type twoDimArrayType = typeParams[0].MakeArrayType(2);
// Create the array of parameter types.
Type[] parameterTypes = {byRefType, pointerType, arrayType};
// Define the abstract Test method. After you have compiled
// and run this example code, you can use ildasm.exe to open
// MakeXxxGenericTypeParameterExample.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,
twoDimArrayType,
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("MakeXxxGenericTypeParameterExample")
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)
' Make the sample type a generic type, by defining a type
' parameter T. All type parameters are defined at the same
' time, by passing an array containing the type parameter
' names.
Dim typeParamNames() As String = {"T"}
Dim typeParams() As GenericTypeParameterBuilder = _
myType.DefineGenericParameters(typeParamNames)
' Define a method that takes a ByRef argument of type T, a
' pointer to type T, and one-dimensional array of type T. The
' method returns a two-dimensional array of type T.
'
' 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, using the generic type parameter T.
'
Dim byRefType As Type = typeParams(0).MakeByRefType
Dim pointerType As Type = typeParams(0).MakePointerType
Dim arrayType As Type = typeParams(0).MakeArrayType
Dim twoDimArrayType As Type = typeParams(0).MakeArrayType(2)
' Create the array of parameter types.
Dim parameterTypes() As Type = _
{byRefType, pointerType, arrayType}
' Define the abstract Test method. After you have compiled
' and run this example code, you can use ildasm.exe to open
' MakeXxxGenericTypeParameterExample.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, _
twoDimArrayType, _
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 、パラメーター リストのポインター型を生成する方法を提供します。
適用対象
こちらもご覧ください
GitHub で Microsoft と共同作業する
このコンテンツのソースは GitHub にあります。そこで、issue や pull request を作成および確認することもできます。 詳細については、共同作成者ガイドを参照してください。
.NET