CallingConventions 列挙体
列挙体に対して有効な呼び出し規約を定義します。
この列挙体には、メンバ値をビットごとに演算するための FlagsAttribute 属性が含まれています。
<Flags>
<Serializable>
Public Enum CallingConventions
[C#]
[Flags]
[Serializable]
public enum CallingConventions
[C++]
[Flags]
[Serializable]
__value public enum CallingConventions
[JScript]
public
Flags
Serializable
enum CallingConventions
解説
ネイティブの呼び出し規約は、コンパイル済みのメソッドに渡される引数の順序やレイアウトを制御する一連の規則です。この規則は、戻り値を渡す方法、引数に使用するレジスタ、呼び出されるメソッドまたは呼び出し元メソッドのいずれがスタックから引数を削除するか、なども制御します。
メンバ
メンバ名 | 説明 | 値 |
---|---|---|
Any
.NET Compact Framework でもサポート。 |
Standard または VarArgs のいずれかの呼び出し規約を使用することを指定します。 | 3 |
ExplicitThis
.NET Compact Framework でもサポート。 |
シグネチャが、インスタンスまたは仮想メソッド (非静的メソッド) への呼び出しを表す関数ポインタ シグネチャであることを示します。 ExplicitThis が設定されている場合は HasThis も設定する必要があります。呼び出されるメソッドに渡される最初の引数は this ポインタのままですが、その引数の型は不明になります。したがって、this ポインタの型 (またはクラス) を記述するトークンが、そのメタデータ シグネチャに明示的に格納されます。 | 64 |
HasThis
.NET Compact Framework でもサポート。 |
インスタンスまたは仮想メソッド (非静的メソッド) を指定します。実行時に、呼び出されるメソッドに、目的のオブジェクトへのポインタが最初の引数 (this ポインタ) として渡されます。メタデータに格納されているシグネチャには、この最初の引数の型は含まれていません。メソッドが明らかに指定されており、そのメソッドを所有するクラスをメタデータから確認できるためです。 | 32 |
Standard
.NET Compact Framework でもサポート。 |
共通言語ランタイムで決定されている既定の呼び出し規約を指定します。 | 1 |
VarArgs
.NET Compact Framework でもサポート。 |
引数の数が変化するメソッドの呼び出し規約を指定します。 | 2 |
使用例
Public Class MyClass1
Public Sub New(ByVal i As Integer)
End Sub
Public Shared Sub Main()
Try
Dim myType As Type = GetType(MyClass1)
Dim types(0) As Type
types(0) = GetType(Integer)
' Get the public instance constructor that takes an integer parameter.
Dim constructorInfoObj As ConstructorInfo = _
myType.GetConstructor(BindingFlags.Instance Or _
BindingFlags.Public, Nothing, _
CallingConventions.HasThis, types, Nothing)
If Not (constructorInfoObj Is Nothing) Then
Console.WriteLine("The constructor of MyClass1 that " + _
"is a public instance method and takes an " + _
"integer as a parameter is: ")
Console.WriteLine(constructorInfoObj.ToString())
Else
Console.WriteLine("The constructor MyClass1 that " + _
"is a public instance method and takes an " + _
"integer as a parameter is not available.")
End If
Catch e As ArgumentNullException
Console.WriteLine("ArgumentNullException: " + e.Message)
Catch e As ArgumentException
Console.WriteLine("ArgumentException: " + e.Message)
Catch e As SecurityException
Console.WriteLine("SecurityException: " + e.Message)
Catch e As Exception
Console.WriteLine("Exception: " + e.Message)
End Try
End Sub
End Class
[C#]
using System;
using System.Reflection;
using System.Security;
public class MyClass1
{
public MyClass1(int i){}
public static void Main()
{
try
{
Type myType = typeof(MyClass1);
Type[] types = new Type[1];
types[0] = typeof(int);
// Get the public instance constructor that takes an integer parameter.
ConstructorInfo constructorInfoObj = myType.GetConstructor(
BindingFlags.Instance | BindingFlags.Public, null,
CallingConventions.HasThis, types, null);
if(constructorInfoObj != null)
{
Console.WriteLine("The constructor of MyClass1 that is a public " +
"instance method and takes an integer as a parameter is: ");
Console.WriteLine(constructorInfoObj.ToString());
}
else
{
Console.WriteLine("The constructor of MyClass1 that is a public instance " +
"method and takes an integer as a parameter is not available.");
}
}
catch(ArgumentNullException e)
{
Console.WriteLine("ArgumentNullException: " + e.Message);
}
catch(ArgumentException e)
{
Console.WriteLine("ArgumentException: " + e.Message);
}
catch(SecurityException e)
{
Console.WriteLine("SecurityException: " + e.Message);
}
catch(Exception e)
{
Console.WriteLine("Exception: " + e.Message);
}
}
}
[C++]
#using <mscorlib.dll>
using namespace System;
using namespace System::Reflection;
using namespace System::Security;
public __gc class MyClass1 {
public:
MyClass1(int i) {}
}
;
int main() {
try {
Type* myType = __typeof(MyClass1);
Type* types[] = new Type*[1];
types->Item[0] = __typeof(int);
// Get the public instance constructor that takes an integer parameter.
ConstructorInfo* constructorInfoObj = myType->GetConstructor(static_cast<BindingFlags>(BindingFlags::Instance | BindingFlags::Public), 0,
CallingConventions::HasThis, types, 0);
if (constructorInfoObj != 0) {
Console::WriteLine(S"The constructor of MyClass1 that is a public instance method and takes an integer as a parameter is: ");
Console::WriteLine(constructorInfoObj);
} else {
Console::WriteLine(S"The constructor of MyClass1 that is a public instance method and takes an integer as a parameter is not available.");
}
} catch (ArgumentNullException* e) {
Console::WriteLine(S"ArgumentNullException: {0}", e->Message);
} catch (ArgumentException* e) {
Console::WriteLine(S"ArgumentException: {0}", e->Message);
} catch (SecurityException* e) {
Console::WriteLine(S"SecurityException: {0}", e->Message);
} catch (Exception* e) {
Console::WriteLine(S"Exception: {0}", e->Message);
}
}
[JScript] JScript のサンプルはありません。Visual Basic、C#、および C++ のサンプルを表示するには、このページの左上隅にある言語のフィルタ ボタン をクリックします。
必要条件
名前空間: System.Reflection
プラットフォーム: Windows 98, Windows NT 4.0, Windows Millennium Edition, Windows 2000, Windows XP Home Edition, Windows XP Professional, Windows Server 2003 ファミリ, .NET Compact Framework - Windows CE .NET
アセンブリ: Mscorlib (Mscorlib.dll 内)