sizeof-Operator (C#-Verweis)sizeof operator (C# reference)

Der sizeof-Operator gibt die Anzahl der Bytes zurück, die von einer Variablen eines bestimmten Typs belegt werden.The sizeof operator returns the number of bytes occupied by a variable of a given type. Das Argument für den sizeof-Operator muss der Name eines nicht verwalteten Typs oder eines Typparameters sein, der darauf beschränkt ist, ein nicht verwalteter Typ zu sein.The argument to the sizeof operator must be the name of an unmanaged type or a type parameter that is constrained to be an unmanaged type.

Der sizeof-Operator erfordert einen unsicheren Kontext.The sizeof operator requires an unsafe context. Die in der folgenden Tabelle dargestellten Ausdrücke werden jedoch in der Kompilierzeit auf die entsprechenden konstanten Werte ausgewertet und erfordern keinen unsicheren Kontext:However, the expressions presented in the following table are evaluated in compile time to the corresponding constant values and don't require an unsafe context:

expressionExpression Konstanter WertConstant value
sizeof(sbyte) 11
sizeof(byte) 11
sizeof(short) 22
sizeof(ushort) 22
sizeof(int) 44
sizeof(uint) 44
sizeof(long) 88
sizeof(ulong) 88
sizeof(char) 22
sizeof(float) 44
sizeof(double) 88
sizeof(decimal) 1616
sizeof(bool) 11

Sie müssen auch keinen unsicheren Kontext verwenden, wenn der Operand des sizeof-Operators der Name eines Enumerationstyps ist.You also don't need to use an unsafe context when the operand of the sizeof operator is the name of an enum type.

Im folgenden Beispiel wird die Verwendung des sizeof-Operators veranschaulicht:The following example demonstrates the usage of the sizeof operator:

using System;

public struct Point
{
    public Point(byte tag, double x, double y) => (Tag, X, Y) = (tag, x, y);

    public byte Tag { get; }
    public double X { get; }
    public double Y { get; }
}

public class SizeOfOperator
{
    public static void Main()
    {
        Console.WriteLine(sizeof(byte));  // output: 1
        Console.WriteLine(sizeof(double));  // output: 8

        DisplaySizeOf<Point>();  // output: Size of Point is 24
        DisplaySizeOf<decimal>();  // output: Size of System.Decimal is 16

        unsafe
        {
            Console.WriteLine(sizeof(Point*));  // output: 8
        }
    }

    static unsafe void DisplaySizeOf<T>() where T : unmanaged
    {
        Console.WriteLine($"Size of {typeof(T)} is {sizeof(T)}");
    }
}

Der sizeof-Operator gibt die Anzahl der Bytes zurück, die von der Common Language Runtime im verwalteten Speicher belegt werden.The sizeof operator returns a number of bytes that would be allocated by the common language runtime in managed memory. Wie im vorherigen Beispiel veranschaulicht, enthält dieser Wert für Strukturtypen alle Auffüllzeichen.For struct types, that value includes any padding, as the preceding example demonstrates. Das Ergebnis des sizeof-Operators unterscheidet sich möglicherweise von dem Ergebnis der Marshal.SizeOf-Methode, die die Größe eines Typs in nicht verwaltetem Speicher zurückgibt.The result of the sizeof operator might differ from the result of the Marshal.SizeOf method, which returns the size of a type in unmanaged memory.

C#-SprachspezifikationC# language specification

Weitere Informationen finden Sie im Abschnitt Der sizeof-Operator in der C#-Sprachspezifikation.For more information, see The sizeof operator section of the C# language specification.

Siehe auchSee also