Not
Åtkomst till denna sida kräver auktorisation. Du kan prova att logga in eller byta katalog.
Åtkomst till denna sida kräver auktorisation. Du kan prova att byta katalog.
Operatorn sizeof returnerar antalet byte som används av en variabel av en viss typ. I säker kod måste argumentet till operatorn sizeof vara namnet på en inbyggd ohanterad typ.
C#-språkreferensen dokumenterar den senaste versionen av C#-språket. Den innehåller även inledande dokumentation för funktioner i offentliga förhandsversioner för den kommande språkversionen.
Dokumentationen identifierar alla funktioner som först introducerades i de tre senaste versionerna av språket eller i aktuella offentliga förhandsversioner.
Tips/Råd
Information om när en funktion först introducerades i C# finns i artikeln om språkversionshistoriken för C#.
Uttrycken som presenteras i följande tabell utvärderas vid kompileringstiden till motsvarande konstanta värden och kräver ingen osäker kontext:
| Uttryck | Konstant värde |
|---|---|
sizeof(sbyte) |
1 |
sizeof(byte) |
1 |
sizeof(short) |
2 |
sizeof(ushort) |
2 |
sizeof(int) |
4 |
sizeof(uint) |
4 |
sizeof(long) |
8 |
sizeof(ulong) |
8 |
sizeof(char) |
2 |
sizeof(float) |
4 |
sizeof(double) |
8 |
sizeof(decimal) |
16 |
sizeof(bool) |
1 |
Storleken på en inbyggd, ohanterad typ är en kompileringskonstant.
I osäker kod kan du använda sizeof följande:
- En typparameter som är begränsad till en ohanterad typ returnerar storleken på den ohanterade typen vid körning.
- En hanterad typ eller en pekartyp returnerar storleken på referensen eller pekaren, inte storleken på det objekt som den refererar till.
I följande exempel visas användningen av operatorn sizeof:
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)}");
}
}
Operatorn sizeof ger tillbaka antalet byte som allokerats av Common Language Runtime i hanterat minne. För struct- typer innehåller detta värde all utfyllnad, vilket visas i föregående exempel. Resultatet av sizeof-operatorn kan skilja sig från resultatet av Marshal.SizeOf-metoden, som returnerar storleken på en typ i ohanterat minne.
Viktig
Värdet som returneras av sizeof kan skilja sig från resultatet av Marshal.SizeOf(Object), som returnerar storleken på typen i ohanterat minne.
Språkspecifikation för C#
Mer information finns i Avsnittet storlek på operatorn i C#-språkspecifikationen.