CallingConventions 枚举
定义枚举的有效调用约定。
此枚举有一个 FlagsAttribute 属性,允许其成员值按位组合。
**命名空间:**System.Reflection
**程序集:**mscorlib(在 mscorlib.dll 中)
语法
声明
<SerializableAttribute> _
<FlagsAttribute> _
<ComVisibleAttribute(True)> _
Public Enumeration CallingConventions
用法
Dim instance As CallingConventions
[SerializableAttribute]
[FlagsAttribute]
[ComVisibleAttribute(true)]
public enum CallingConventions
[SerializableAttribute]
[FlagsAttribute]
[ComVisibleAttribute(true)]
public enum class CallingConventions
/** @attribute SerializableAttribute() */
/** @attribute FlagsAttribute() */
/** @attribute ComVisibleAttribute(true) */
public enum CallingConventions
SerializableAttribute
FlagsAttribute
ComVisibleAttribute(true)
public enum CallingConventions
成员
成员名称 | 说明 | |
---|---|---|
![]() |
Any | 指定可以使用 Standard 调用约定或 VarArgs 调用约定。 |
![]() |
ExplicitThis | 指定该签名是函数指针签名,它表示对实例或虚方法(不是静态方法)的调用。如果设置了 ExplicitThis,则还须设置 HasThis。传递到被调用方法的第一个参数仍然是 this 指针,但第一个参数的类型现在未知。因此,应将描述 this 指针的类型(或类)的标记显式存储到其元数据签名中。 |
![]() |
HasThis | 指定一个实例或虚方法(不是静态方法)。运行时,向被调用方法传递一个指向目标对象的指针作为此方法的第一个参数(this 指针)。存储在元数据中的签名不包括此第一个参数的类型,因为此方法是已知的,并且其所有者类能够从元数据中发现。 |
![]() |
Standard | 指定公共语言运行库确定的默认调用约定。对静态方法使用此调用约定。对实例或虚方法使用 HasThis。 |
![]() |
VarArgs | 指定包含变量参数的方法的调用约定。 |
备注
本机调用约定是一组规则,用于控制传递到已编译方法的参数的顺序和布局。它还控制传递返回值的方式、对参数使用哪些寄存器以及被调用方法或调用方法是否移除堆栈中的参数。
示例
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
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);
}
}
}
using namespace System;
using namespace System::Reflection;
using namespace System::Security;
public ref class MyClass1
{
public:
MyClass1( int i ){}
};
int main()
{
try
{
Type^ myType = MyClass1::typeid;
array<Type^>^types = gcnew array<Type^>(1);
types[ 0 ] = int::typeid;
// Get the public instance constructor that takes an integer parameter.
ConstructorInfo^ constructorInfoObj = myType->GetConstructor( static_cast<BindingFlags>(BindingFlags::Instance | BindingFlags::Public), nullptr, CallingConventions::HasThis, types, nullptr );
if ( constructorInfoObj != nullptr )
{
Console::WriteLine( "The constructor of MyClass1 that is a public instance method and takes an integer as a parameter is: " );
Console::WriteLine( constructorInfoObj );
}
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: {0}", e->Message );
}
catch ( ArgumentException^ e )
{
Console::WriteLine( "ArgumentException: {0}", e->Message );
}
catch ( SecurityException^ e )
{
Console::WriteLine( "SecurityException: {0}", e->Message );
}
catch ( Exception^ e )
{
Console::WriteLine( "Exception: {0}", e->Message );
}
}
import System.*;
import System.Reflection.*;
import System.Security.*;
public class MyClass1
{
public MyClass1(int i)
{
} //MyClass1
public static void main(String[] args)
{
try {
Type myType = MyClass1.class.ToType();
Type types[] = new Type[1];
types.set_Item(0, int.class.ToType());
// 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.get_Message());
}
catch (ArgumentException e) {
Console.WriteLine("ArgumentException: " + e.get_Message());
}
catch (SecurityException e) {
Console.WriteLine("SecurityException: " + e.get_Message());
}
catch (System.Exception e) {
Console.WriteLine("Exception: " + e.get_Message());
}
} //main
} //MyClass1
平台
Windows 98、Windows 2000 SP4、Windows CE、Windows Millennium Edition、Windows Mobile for Pocket PC、Windows Mobile for Smartphone、Windows Server 2003、Windows XP Media Center Edition、Windows XP Professional x64 Edition、Windows XP SP2、Windows XP Starter Edition
.NET Framework 并不是对每个平台的所有版本都提供支持。有关受支持版本的列表,请参见系统要求。
版本信息
.NET Framework
受以下版本支持:2.0、1.1、1.0
.NET Compact Framework
受以下版本支持:2.0、1.0