Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
De operator sizeof retourneert het aantal bytes dat wordt bezet door een variabele van een bepaald type. In veilige code moet het argument voor de sizeof operator de naam zijn van een ingebouwd , niet-beheerd type.
De expressies die in de volgende tabel worden weergegeven, worden tijdens het compileren geƫvalueerd op de bijbehorende constante waarden en vereisen geen onveilige context:
| Uitdrukking | Constante waarde |
|---|---|
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 |
De grootte van een ingebouwd, onbeheerd type is een compilatieconstante.
In onveilige code kunt u als volgt gebruiken sizeof :
- Een typeparameter die is beperkt tot een niet-beheerd type, retourneert de grootte van dat onbeheerde type tijdens runtime.
- Een beheerd type of een aanwijzertype retourneert de grootte van de verwijzing of aanwijzer, niet de grootte van het object waarnaar wordt verwezen.
In het volgende voorbeeld ziet u het gebruik van de operator 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)}");
}
}
De operator sizeof retourneert het aantal bytes dat is toegewezen door de algemene taalruntime in het beheerde geheugen. Voor struct typen bevat die waarde enige opvulling, zoals het voorgaande voorbeeld aantoont. Het resultaat van de sizeof-operator kan verschillen van het resultaat van de Marshal.SizeOf methode, die de grootte van een type in onbeheerde geheugen retourneert.
Belangrijk
De waarde die door sizeof wordt geretourneerd, kan verschillen van het resultaat van Marshal.SizeOf(Object), wat de grootte van het type in onbeheerd geheugen retourneert.
C#-taalspecificatie
Zie De grootte van de operator sectie van de C#-taalspecificatievoor meer informatie.