Прочитать на английском

Поделиться через


CallingConventions Перечисление

Определение

Определяет допустимые соглашения о вызовах для метода.

Это перечисление поддерживает побитовую комбинацию значений его членов.

[System.Flags]
public enum CallingConventions
[System.Flags]
[System.Serializable]
public enum CallingConventions
[System.Flags]
[System.Serializable]
[System.Runtime.InteropServices.ComVisible(true)]
public enum CallingConventions
Наследование
CallingConventions
Атрибуты

Поля

Имя Значение Описание
Any 3

Определяет используемые соглашения вызова: Standard или VarArgs.

ExplicitThis 64

Указывает, что данная сигнатура является сигнатурой указателя функции, представляя собой экземпляр или виртуальный (не статический) метод. Если установлен параметр ExplicitThis, должен быть задан и параметр HasThis. Первый аргумент, передаваемый вызываемому методу, все же является указателем this, но тип первого аргумента в этот момент неизвестен. Следовательно, в сигнатуре метаданных указателя this явно хранится маркер, описывающий тип (или класс) этого указателя.

HasThis 32

Определяет экземпляр или виртуальный (не статический) метод. Во время выполнения вызываемому методу в качестве первого аргумента передается указатель на конечный объект (указатель this). Сигнатура, хранящаяся в метаданных, не содержит тип этого первого аргумента, так как этот метод известен и класс его владельца может быть извлечен из метаданных.

Standard 1

Определяет соглашение вызова по умолчанию, определяемое общеязыковой средой выполнения. Это соглашение о вызове используется для статических методов. Для экземпляра или виртуальных методов используется метод HasThis.

VarArgs 2

Определяет соглашение вызова для методов с переменными аргументами.

Примеры

using System;
using System.Reflection;
using System.Security;

public class MyClass3
{
    public MyClass3(int i) { }
    public static void Main()
    {
        try
        {
            Type myType = typeof(MyClass3);
            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 MyClass3 that is a public " +
                    "instance method and takes an integer as a parameter is: ");
                Console.WriteLine(constructorInfoObj.ToString());
            }
            else
            {
                Console.WriteLine("The constructor of MyClass3 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);
        }
    }
}

Комментарии

Собственное соглашение о вызовах — это набор правил, управляющих порядком и расположением аргументов, передаваемых в скомпилированные методы. Он также определяет способ передачи возвращаемого значения, регистры, используемые для аргументов, а также то, удаляет ли вызываемый или вызывающий метод аргументы из стека.

Применяется к

Продукт Версии
.NET Core 1.0, Core 1.1, Core 2.0, Core 2.1, Core 2.2, Core 3.0, Core 3.1, 5, 6, 7, 8, 9
.NET Framework 1.1, 2.0, 3.0, 3.5, 4.0, 4.5, 4.5.1, 4.5.2, 4.6, 4.6.1, 4.6.2, 4.7, 4.7.1, 4.7.2, 4.8, 4.8.1
.NET Standard 1.0, 1.1, 1.2, 1.3, 1.4, 1.6, 2.0, 2.1
UWP 10.0