CallingConventions Enumeration

Definition

Definiert die gültigen Aufrufkonventionen für eine Methode.

Diese Enumeration unterstützt eine bitweise Kombination ihrer Memberwerte.

public enum class 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
[<System.Flags>]
type CallingConventions = 
[<System.Flags>]
[<System.Serializable>]
type CallingConventions = 
[<System.Flags>]
[<System.Serializable>]
[<System.Runtime.InteropServices.ComVisible(true)>]
type CallingConventions = 
Public Enum CallingConventions
Vererbung
CallingConventions
Attribute

Felder

Name Wert Beschreibung
Standard 1

Gibt die Standardaufrufkonvention an, die durch die Common Language Runtime bestimmt wird. Verwenden Sie diese Aufrufkonvention für statische Methoden. Verwenden Sie z. B. oder virtuelle Methoden HasThis.

VarArgs 2

Gibt die Aufrufkonvention für Methoden mit variablen Argumenten an.

Any 3

Gibt an, dass entweder die Standard oder die VarArgs Aufrufkonvention verwendet werden kann.

HasThis 32

Gibt eine Instanz oder virtuelle Methode (keine statische Methode) an. Zur Laufzeit wird die aufgerufene Methode als erstes Argument (der this Zeiger) an das Zielobjekt übergeben. Die in Metadaten gespeicherte Signatur enthält nicht den Typ dieses ersten Arguments, da die Methode bekannt ist und die Besitzerklasse aus Metadaten ermittelt werden kann.

ExplicitThis 64

Gibt an, dass es sich bei der Signatur um eine Funktionszeigersignatur handelt, die einen Aufruf einer Instanz oder einer virtuellen Methode darstellt (keine statische Methode). Wenn ExplicitThis festgelegt, HasThis muss auch festgelegt werden. Das erste Argument, das an die aufgerufene Methode übergeben wird, ist immer noch ein this Zeiger, aber der Typ des ersten Arguments ist jetzt unbekannt. Daher wird ein Token, das den Typ (oder die Klasse) des this Zeigers beschreibt, explizit in seiner Metadatensignatur gespeichert.

Beispiele

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

Hinweise

Die systemeigene Aufrufkonvention ist der Satz von Regeln für die Reihenfolge und das Layout von Argumenten, die an kompilierte Methoden übergeben werden. Außerdem wird festgelegt, wie der Rückgabewert übergeben wird, was für Argumente verwendet werden soll, und ob die aufgerufene oder die aufrufende Methode Argumente aus dem Stapel entfernt.

Gilt für: