ParameterInfo.IsOptional プロパティ
定義
重要
一部の情報は、リリース前に大きく変更される可能性があるプレリリースされた製品に関するものです。 Microsoft は、ここに記載されている情報について、明示または黙示を問わず、一切保証しません。
このパラメーターが省略可能かどうかを示す値を取得します。
public:
property bool IsOptional { bool get(); };
public bool IsOptional { get; }
member this.IsOptional : bool
Public ReadOnly Property IsOptional As Boolean
プロパティ値
パラメーターが省略可能な場合は true
。それ以外の場合は false
。
例
次の例は、および ParameterAttributes.Optional 属性のメソッド パラメーターをParameterAttributes.InParameterAttributes.Outテストする方法を示しています。
この例には、次の処理を DefineMethod
行うメソッドが含まれています。
型を含む動的アセンブリを
MyType
作成します。にメソッドを
MyMethod
追加しますMyType
。MyMethod
には 3 つのパラメーターがあります。 最初のパラメーターは、 で ParameterAttributes.In定義され、2 番目のパラメーターは で ParameterAttributes.Out、3 番目のパラメーターは で ParameterAttributes.Optional定義されます。を呼び出 TypeBuilder.CreateType して型を完了します。
を DefineMethod
実行した後、動的アセンブリが見つかるまで、現在読み込まれているアセンブリを検索します。 アセンブリから読み込みMyType
、 メソッドの オブジェクトをMyMethod
MethodInfo取得し、パラメーターを調べます。 この例では、、IsOut、および IsOptional プロパティをIsIn使用して、パラメーターに関する情報を表示します。
using namespace System;
using namespace System::Reflection;
using namespace System::Threading;
using namespace System::Reflection::Emit;
void DefineMethod()
{
AssemblyName^ myAssemblyName = gcnew AssemblyName;
myAssemblyName->Name = "MyAssembly";
// Get the assembly builder from the application domain associated with the current thread.
AssemblyBuilder^ myAssemblyBuilder = Thread::GetDomain()->DefineDynamicAssembly( myAssemblyName, AssemblyBuilderAccess::RunAndSave );
// Create a dynamic module in the assembly.
ModuleBuilder^ myModuleBuilder = myAssemblyBuilder->DefineDynamicModule( "MyModule", "MyAssembly.dll" );
// Create a type in the module.
TypeBuilder^ myTypeBuilder = myModuleBuilder->DefineType( "MyType" );
// Create a method called MyMethod.
array<Type^>^type1 = {int::typeid,short::typeid,long::typeid};
MethodBuilder^ myMethodBuilder = myTypeBuilder->DefineMethod( "MyMethod", static_cast<MethodAttributes>(MethodAttributes::Public | MethodAttributes::HideBySig | MethodAttributes::Static), String::typeid, type1 );
// Set the attributes for the parameters of the method.
// Set the attribute for the first parameter to IN.
ParameterBuilder^ myParameterBuilder = myMethodBuilder->DefineParameter( 1, ParameterAttributes::In, "MyIntParameter" );
// Set the attribute for the second parameter to OUT.
myParameterBuilder = myMethodBuilder->DefineParameter( 2, ParameterAttributes::Out, "MyShortParameter" );
// Set the attribute for the third parameter to OPTIONAL.
myParameterBuilder = myMethodBuilder->DefineParameter( 3, static_cast<ParameterAttributes>(ParameterAttributes::Optional | ParameterAttributes::HasDefault), "MyLongParameter" );
// Get the Microsoft Intermediate Language generator for the method.
ILGenerator^ myILGenerator = myMethodBuilder->GetILGenerator();
// Use the utility method to generate the MSIL instructions that print a String* to the console.
myILGenerator->EmitWriteLine( "Hello World!" );
// Generate the S"ret" MSIL instruction.
myILGenerator->Emit( OpCodes::Ret );
// End the creation of the type.
myTypeBuilder->CreateType();
}
int main()
{
// Create a dynamic assembly with a type named MyType.
DefineMethod();
// Get the assemblies currently loaded in the application domain.
array<Assembly^>^myAssemblies = Thread::GetDomain()->GetAssemblies();
Assembly^ myAssembly = nullptr;
// Get the assembly named MyAssembly.
for ( int i = 0; i < myAssemblies->Length; i++ )
if ( String::Compare( myAssemblies[ i ]->GetName( false )->Name, "MyAssembly" ) == 0 )
myAssembly = myAssemblies[ i ];
if ( myAssembly != nullptr )
{
// Get a type named MyType.
Type^ myType = myAssembly->GetType( "MyType" );
// Get a method named MyMethod from the type.
MethodBase^ myMethodBase = myType->GetMethod( "MyMethod" );
// Get the parameters associated with the method.
array<ParameterInfo^>^myParameters = myMethodBase->GetParameters();
Console::WriteLine( "\nThe method {0} has the {1} parameters :", myMethodBase, myParameters->Length );
// Print the IN, OUT and OPTIONAL attributes associated with each of the parameters.
for ( int i = 0; i < myParameters->Length; i++ )
{
if ( myParameters[ i ]->IsIn )
Console::WriteLine( "\tThe {0} parameter has the In attribute", i + 1 );
if ( myParameters[ i ]->IsOptional )
Console::WriteLine( "\tThe {0} parameter has the Optional attribute", i + 1 );
if ( myParameters[ i ]->IsOut )
Console::WriteLine( "\tThe {0} parameter has the Out attribute", i + 1 );
}
}
else
Console::WriteLine( "Could not find a assembly named 'MyAssembly' for the current application domain" );
}
using System;
using System.Reflection;
using System.Threading;
using System.Reflection.Emit;
public class ParameterInfo_IsIn_IsOut_IsOptional
{
public static void DefineMethod()
{
AssemblyName myAssemblyName = new AssemblyName();
myAssemblyName.Name = "MyAssembly";
// Get the assembly builder from the application domain associated with the current thread.
AssemblyBuilder myAssemblyBuilder = Thread.GetDomain().DefineDynamicAssembly(myAssemblyName, AssemblyBuilderAccess.RunAndSave);
// Create a dynamic module in the assembly.
ModuleBuilder myModuleBuilder = myAssemblyBuilder.DefineDynamicModule("MyModule", "MyAssembly.dll");
// Create a type in the module.
TypeBuilder myTypeBuilder = myModuleBuilder.DefineType("MyType");
// Create a method called MyMethod.
MethodBuilder myMethodBuilder = myTypeBuilder.DefineMethod("MyMethod",MethodAttributes.Public | MethodAttributes.HideBySig |
MethodAttributes.Static, typeof(string), new Type[] {typeof(int), typeof(short), typeof(long)});
// Set the attributes for the parameters of the method.
// Set the attribute for the first parameter to IN.
ParameterBuilder myParameterBuilder = myMethodBuilder.DefineParameter(1, ParameterAttributes.In, "MyIntParameter");
// Set the attribute for the second parameter to OUT.
myParameterBuilder = myMethodBuilder.DefineParameter(2, ParameterAttributes.Out, "MyShortParameter");
// Set the attribute for the third parameter to OPTIONAL.
myParameterBuilder = myMethodBuilder.DefineParameter(3, ParameterAttributes.Optional | ParameterAttributes.HasDefault, "MyLongParameter");
// Get the Microsoft Intermediate Language generator for the method.
ILGenerator myILGenerator = myMethodBuilder.GetILGenerator();
// Use the utility method to generate the MSIL instructions that print a string to the console.
myILGenerator.EmitWriteLine("Hello World!");
// Generate the "ret" MSIL instruction.
myILGenerator.Emit(OpCodes.Ret);
// End the creation of the type.
myTypeBuilder.CreateType();
}
public static void Main()
{
// Create a dynamic assembly with a type named MyType.
DefineMethod();
// Get the assemblies currently loaded in the application domain.
Assembly[] myAssemblies = Thread.GetDomain().GetAssemblies();
Assembly myAssembly = null;
// Get the assembly named MyAssembly.
for(int i = 0; i < myAssemblies.Length; i++)
if(String.Compare(myAssemblies[i].GetName(false).Name, "MyAssembly") == 0)
myAssembly = myAssemblies[i];
if(myAssembly != null)
{
// Get a type named MyType.
Type myType = myAssembly.GetType("MyType");
// Get a method named MyMethod from the type.
MethodBase myMethodBase = myType.GetMethod("MyMethod");
// Get the parameters associated with the method.
ParameterInfo[] myParameters = myMethodBase.GetParameters();
Console.WriteLine("\nThe method {0} has the {1} parameters :",
myMethodBase, myParameters.Length);
// Print the IN, OUT and OPTIONAL attributes associated with each of the parameters.
for(int i = 0; i < myParameters.Length; i++)
{
if(myParameters[i].IsIn)
Console.WriteLine("\tThe {0} parameter has the In attribute",
i + 1);
if(myParameters[i].IsOptional)
Console.WriteLine("\tThe {0} parameter has the Optional attribute",
i + 1);
if(myParameters[i].IsOut)
Console.WriteLine("\tThe {0} parameter has the Out attribute",
i + 1);
}
}
else
{
Console.WriteLine("Could not find a assembly named 'MyAssembly' for the current application domain");
}
}
}
Imports System.Reflection
Imports System.Threading
Imports System.Reflection.Emit
Public Class ParameterInfo_IsIn_IsOut_IsOptional
Public Shared Sub DefineMethod()
Dim myAssemblyName As New AssemblyName()
myAssemblyName.Name = "MyAssembly"
' Get the assesmbly builder from the application domain associated with the current thread.
Dim myAssemblyBuilder As AssemblyBuilder = Thread.GetDomain().DefineDynamicAssembly(myAssemblyName, AssemblyBuilderAccess.RunAndSave)
' Create a dynamic module in the assembly.
Dim myModuleBuilder As ModuleBuilder = myAssemblyBuilder.DefineDynamicModule("MyModule", "MyAssembly.dll")
' Create a type in the module.
Dim myTypeBuilder As TypeBuilder = myModuleBuilder.DefineType("MyType")
' Create a method called MyMethod.
Dim myMethodBuilder As MethodBuilder = myTypeBuilder.DefineMethod("MyMethod", MethodAttributes.Public Or MethodAttributes.HideBySig Or MethodAttributes.Static, GetType(String), New Type() {GetType(Integer), GetType(Short), GetType(Long)})
' Set the attributes for the parameters of the method.
' Set the attribute for the first parameter to IN.
Dim myParameterBuilder As ParameterBuilder = myMethodBuilder.DefineParameter(1, ParameterAttributes.In, "MyIntParameter")
' Set the attribute for the second parameter to OUT.
myParameterBuilder = myMethodBuilder.DefineParameter(2, ParameterAttributes.Out, "MyShortParameter")
' Set the attribute for the third parameter to OPTIONAL.
myParameterBuilder = myMethodBuilder.DefineParameter(3, ParameterAttributes.Optional Or ParameterAttributes.HasDefault, "MyLongParameter")
' Get the Microsoft Intermediate Language generator for the method.
Dim myILGenerator As ILGenerator = myMethodBuilder.GetILGenerator()
' Use the utility method to generate the MSIL instructions that print a string to the console.
myILGenerator.EmitWriteLine("Hello World!")
' Generate the "ret" MSIL instruction.
myILGenerator.Emit(OpCodes.Ret)
' End the creation of the type.
myTypeBuilder.CreateType()
End Sub
Public Shared Sub Main()
' Create a dynamic assembly with a type named 'MyType'.
DefineMethod()
' Get the assemblies currently loaded in the application domain.
Dim myAssemblies As [Assembly]() = Thread.GetDomain().GetAssemblies()
Dim myAssembly As [Assembly] = Nothing
' Get the assembly named MyAssembly.
Dim i As Integer
For i = 0 To myAssemblies.Length - 1
If [String].Compare(myAssemblies(i).GetName(False).Name, "MyAssembly") = 0 Then
myAssembly = myAssemblies(i)
End If
Next i
If Not (myAssembly Is Nothing) Then
' Get a type named MyType.
Dim myType As Type = myAssembly.GetType("MyType")
' Get a method named MyMethod from the type.
Dim myMethodBase As MethodBase = myType.GetMethod("MyMethod")
' Get the parameters associated with the method.
Dim myParameters As ParameterInfo() = myMethodBase.GetParameters()
Console.WriteLine(ControlChars.Cr + "The method {0} has the {1} parameters :", myMethodBase, myParameters.Length)
' Print the IN, OUT and OPTIONAL attributes associated with each of the parameters.
For i = 0 To myParameters.Length - 1
If myParameters(i).IsIn Then
Console.WriteLine(ControlChars.Tab + "The {0} parameter has the In attribute", i + 1)
End If
If myParameters(i).IsOptional Then
Console.WriteLine(ControlChars.Tab + "The {0} parameter has the Optional attribute", i + 1)
End If
If myParameters(i).IsOut Then
Console.WriteLine(ControlChars.Tab + "The {0} parameter has the Out attribute", i + 1)
End If
Next i
Else
Console.WriteLine("Could not find a assembly named 'MyAssembly' for the current application domain")
End If
End Sub
End Class
注釈
このメソッドは、省略可能なメタデータ フラグに依存します。 このフラグはコンパイラによって挿入できますが、コンパイラには必須ではありません。
このメソッドは、列挙子の Optional
フラグを ParameterAttributes
使用します。
配列を ParameterInfo 取得するには、まず メソッドを取得してから を呼び出 MethodBase.GetParametersします。
適用対象
.NET