Leggi in inglese

Condividi tramite


CallingConventions Enumerazione

Definizione

Definisce le convenzioni di chiamata valide per un metodo.

Questa enumerazione supporta una combinazione bit per bit dei rispettivi valori dei membri.

C#
[System.Flags]
public enum CallingConventions
C#
[System.Flags]
[System.Serializable]
public enum CallingConventions
C#
[System.Flags]
[System.Serializable]
[System.Runtime.InteropServices.ComVisible(true)]
public enum CallingConventions
Ereditarietà
CallingConventions
Attributi

Campi

Nome Valore Descrizione
Any 3

Specifica che può essere utilizzata la convenzione di chiamata Standard o VarArgs.

ExplicitThis 64

Specifica che la firma è di tipo puntatore a funzione e rappresenta una chiamata a un'istanza o a un metodo virtuale, non statico. Se si imposta ExplicitThis, è necessario impostare anche HasThis. Il primo argomento passato al metodo chiamato è ancora un puntatore this, ma il tipo del primo argomento è ora sconosciuto. Pertanto, un token che descrive il tipo, o classe, del puntatore this viene memorizzato in modo esplicito nella relativa firma dei metadati.

HasThis 32

Specifica un'istanza o un metodo virtuale, non statico. In fase di esecuzione, al metodo chiamato viene passato un puntatore all'oggetto di destinazione come primo argomento (puntatore this). La firma memorizzata nei metadati non include il tipo di questo primo argomento, poiché il metodo è conosciuto e la classe proprietaria può essere individuata dai metadati.

Standard 1

Specifica la convenzione di chiamata predefinita così come determinato da Common Language Runtime. Utilizzare questa convenzione di chiamata per i metodi statici. Per metodi di istanza o virtuali utilizzare HasThis.

VarArgs 2

Specifica la convenzione di chiamata per i metodi con argomenti variabili.

Esempio

C#
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);
        }
    }
}

Commenti

La convenzione di chiamata nativa è il set di regole che regolano l'ordine e il layout degli argomenti passati ai metodi compilati. Determina anche come passare il valore restituito, i registri da usare per gli argomenti e se il metodo chiamato o chiamante rimuove gli argomenti dallo stack.

Si applica a

Prodotto Versioni
.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