CallingConventions Enumeráció

Definíció

Egy metódus érvényes hívási konvencióit határozza meg.

Ez a felsorolás támogatja a tagértékek bitenkénti kombinációját.

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
Öröklődés
CallingConventions
Attribútumok

Mezők

Name Érték Description
Standard 1

A közös nyelvi futtatókörnyezet által meghatározott alapértelmezett hívási konvenciót adja meg. Használja ezt a hívási konvenciót statikus metódusokhoz. Például a virtuális metódusok használata HasThis.

VarArgs 2

Változó argumentumokkal rendelkező metódusok meghívási konvenciójának megadása.

Any 3

Megadja, hogy a hívási Standard konvenciót vagy a VarArgs hívó konvenciót lehessen használni.

HasThis 32

Egy példányt vagy virtuális metódust határoz meg (nem statikus metódust). Futtatáskor a rendszer az úgynevezett metódust első argumentumként (mutatóként this ) továbbítja a célobjektumnak. A metaadatokban tárolt aláírás nem tartalmazza az első argumentum típusát, mivel a metódus ismert, és a tulajdonososztály a metaadatokból felderíthető.

ExplicitThis 64

Azt adja meg, hogy az aláírás egy függvénymutató aláírása, amely egy példányra vagy virtuális metódusra irányuló hívást jelöl (nem statikus metódust). Ha ExplicitThis be van állítva, HasThis akkor is be kell állítani. A hívott metódusnak átadott első argumentum továbbra is this mutató, de az első argumentum típusa már nem ismert. Ezért a mutató típusát (vagy osztályát this ) leíró jogkivonatot a rendszer kifejezetten a metaadat-aláírásba tárolja.

Példák

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

Megjegyzések

A natív hívási konvenció a lefordított metódusoknak átadott argumentumok sorrendjét és elrendezését szabályozó szabályok halmaza. Azt is szabályozza, hogyan adja át a visszatérési értéket, milyen regiszterek használhatók argumentumokhoz, és hogy a hívott vagy a hívó metódus eltávolítja-e az argumentumokat a veremből.

A következőre érvényes: