ConstructorBuilder.SetImplementationFlags メソッド
このコンストラクタのメソッド実装フラグを設定します。
Public Sub SetImplementationFlags( _
ByVal attributes As MethodImplAttributes _)
[C#]
public void SetImplementationFlags(MethodImplAttributesattributes);
[C++]
public: void SetImplementationFlags(MethodImplAttributesattributes);
[JScript]
public function SetImplementationFlags(
attributes : MethodImplAttributes);
パラメータ
- attributes
メソッド実装フラグ。
例外
例外の種類 | 条件 |
---|---|
InvalidOperationException | 外側の型が CreateType を使用して作成されています。 |
解説
SetImplementationFlags の使用方法については、次のコード例を参照してください。
Dim myMethodBuilder As MethodBuilder = Nothing
Dim myCurrentDomain As AppDomain = AppDomain.CurrentDomain
' Create assembly in current CurrentDomain.
Dim myAssemblyName As New AssemblyName()
myAssemblyName.Name = "TempAssembly"
' Create a dynamic assembly.
myAssemblyBuilder = myCurrentDomain.DefineDynamicAssembly _
(myAssemblyName, AssemblyBuilderAccess.Run)
' Create a dynamic module in the assembly.
myModuleBuilder = myAssemblyBuilder.DefineDynamicModule("TempModule", True)
Dim myFieldInfo2 As FieldInfo = myModuleBuilder.DefineUninitializedData _
("myField", 2, FieldAttributes.Public)
' Create a type in the module.
Dim myTypeBuilder As TypeBuilder = myModuleBuilder.DefineType _
("TempClass", TypeAttributes.Public)
Dim myGreetingField As FieldBuilder = myTypeBuilder.DefineField _
("Greeting", GetType(String), FieldAttributes.Public)
Dim myConstructorArgs As Type() = {GetType(String)}
' Define a constructor of the dynamic class.
Dim myConstructor As ConstructorBuilder = myTypeBuilder.DefineConstructor _
(MethodAttributes.Public, CallingConventions.Standard, myConstructorArgs)
' Set the method implementation flags for the constructor.
myConstructor.SetImplementationFlags(MethodImplAttributes.PreserveSig Or _
MethodImplAttributes.Runtime)
' Get the method implementation flags for the constructor.
Dim myMethodAttributes As MethodImplAttributes = myConstructor.GetMethodImplementationFlags()
Dim myAttributeType As Type = GetType(MethodImplAttributes)
Dim myAttribValue As Integer = CInt(myMethodAttributes)
If Not myAttributeType.IsEnum Then
Console.WriteLine("This is not an Enum")
End If
' Display the field info names of the retrieved method implementation flags.
Dim myFieldInfo As FieldInfo() = myAttributeType.GetFields(BindingFlags.Public Or _
BindingFlags.Static)
Console.WriteLine("The Field info names of the MethodImplAttributes for the constructor are:")
Dim i As Integer
For i = 0 To myFieldInfo.Length - 1
Dim myFieldValue As Integer = CType(myFieldInfo(i).GetValue(Nothing), Int32)
If(myFieldValue And myAttribValue) = myFieldValue Then
Console.WriteLine(" " + myFieldInfo(i).Name)
End If
Next i
[C#]
MethodBuilder myMethodBuilder = null;
AppDomain myCurrentDomain = AppDomain.CurrentDomain;
// Create assembly in current CurrentDomain.
AssemblyName myAssemblyName = new AssemblyName();
myAssemblyName.Name = "TempAssembly";
// Create a dynamic assembly.
myAssemblyBuilder = myCurrentDomain.DefineDynamicAssembly
(myAssemblyName, AssemblyBuilderAccess.Run);
// Create a dynamic module in the assembly.
myModuleBuilder = myAssemblyBuilder.DefineDynamicModule("TempModule", true);
FieldInfo myFieldInfo2 =
myModuleBuilder.DefineUninitializedData("myField", 2, FieldAttributes.Public);
// Create a type in the module.
TypeBuilder myTypeBuilder = myModuleBuilder.DefineType("TempClass",TypeAttributes.Public);
FieldBuilder myGreetingField = myTypeBuilder.DefineField("Greeting",
typeof(String), FieldAttributes.Public);
Type[] myConstructorArgs = { typeof(String) };
// Define a constructor of the dynamic class.
ConstructorBuilder myConstructor = myTypeBuilder.DefineConstructor(
MethodAttributes.Public, CallingConventions.Standard, myConstructorArgs);
// Set the method implementation flags for the constructor.
myConstructor.SetImplementationFlags(MethodImplAttributes.PreserveSig | MethodImplAttributes.Runtime);
// Get the method implementation flags for the constructor.
MethodImplAttributes myMethodAttributes = myConstructor.GetMethodImplementationFlags();
Type myAttributeType = typeof(MethodImplAttributes);
int myAttribValue = (int) myMethodAttributes;
if(! myAttributeType.IsEnum)
{
Console.WriteLine("This is not an Enum");
}
// Display the field info names of the retrieved method implementation flags.
FieldInfo[] myFieldInfo = myAttributeType.GetFields(BindingFlags.Public | BindingFlags.Static);
Console.WriteLine("The Field info names of the MethodImplAttributes for the constructor are:");
for (int i = 0; i < myFieldInfo.Length; i++)
{
int myFieldValue = (Int32)myFieldInfo[i].GetValue(null);
if ((myFieldValue & myAttribValue) == myFieldValue)
{
Console.WriteLine(" " + myFieldInfo[i].Name);
}
}
[C++]
MethodBuilder* myMethodBuilder = 0;
AppDomain* myCurrentDomain = AppDomain::CurrentDomain;
// Create assembly in current CurrentDomain.
AssemblyName* myAssemblyName = new AssemblyName();
myAssemblyName->Name = S"TempAssembly";
// Create a dynamic assembly.
myAssemblyBuilder = myCurrentDomain->DefineDynamicAssembly
(myAssemblyName, AssemblyBuilderAccess::Run);
// Create a dynamic module in the assembly.
myModuleBuilder = myAssemblyBuilder->DefineDynamicModule(S"TempModule", true);
FieldInfo* myFieldInfo2 =
myModuleBuilder->DefineUninitializedData(S"myField", 2, FieldAttributes::Public);
// Create a type in the module.
TypeBuilder* myTypeBuilder = myModuleBuilder->DefineType(S"TempClass", TypeAttributes::Public);
FieldBuilder* myGreetingField = myTypeBuilder->DefineField(S"Greeting",
__typeof(String), FieldAttributes::Public);
Type* myConstructorArgs[] = { __typeof(String) };
// Define a constructor of the dynamic class.
ConstructorBuilder* myConstructor = myTypeBuilder->DefineConstructor(MethodAttributes::Public, CallingConventions::Standard, myConstructorArgs);
// Set the method implementation flags for the constructor.
myConstructor->SetImplementationFlags(static_cast<MethodImplAttributes>(MethodImplAttributes::PreserveSig | MethodImplAttributes::Runtime));
// Get the method implementation flags for the constructor.
MethodImplAttributes myMethodAttributes = myConstructor->GetMethodImplementationFlags();
Type* myAttributeType = __typeof(MethodImplAttributes);
int myAttribValue = (int) myMethodAttributes;
if (! myAttributeType->IsEnum)
{
Console::WriteLine(S"This is not an Enum");
}
// Display the field info names of the retrieved method implementation flags.
FieldInfo* myFieldInfo[] = myAttributeType->GetFields(static_cast<BindingFlags>(BindingFlags::Public | BindingFlags::Static));
Console::WriteLine(S"The Field info names of the MethodImplAttributes for the constructor are:");
for (int i = 0; i < myFieldInfo->Length; i++)
{
int myFieldValue = *__try_cast<Int32 __gc *>(myFieldInfo[i]->GetValue(0));
if ((myFieldValue & myAttribValue) == myFieldValue) {
Console::WriteLine(S" {0}", myFieldInfo[i]->Name);
}
}
必要条件
プラットフォーム: Windows 98, Windows NT 4.0, Windows Millennium Edition, Windows 2000, Windows XP Home Edition, Windows XP Professional, Windows Server 2003 ファミリ
参照
ConstructorBuilder クラス | ConstructorBuilder メンバ | System.Reflection.Emit 名前空間