Niet-beheerde typen (C#-verwijzing)
Een type is een niet-beheerd type als dit een van de volgende typen is:
sbyte
, ,short
, ,ushort
, ,int
, , ,nuint
float
ulong
double
char
nint
decimal
uint
long
byte
bool
- Elk enumtype
- Elk type aanwijzer
- Een tuple waarvan de leden allemaal een onbeheerd type zijn
- Elk door de gebruiker gedefinieerd structtype dat alleen velden van niet-beheerde typen bevat.
U kunt de unmanaged
beperking gebruiken om op te geven dat een typeparameter een niet-aanwijzer, niet-nullable onbeheerd type is.
Een samengesteld structtype dat alleen velden van niet-beheerde typen bevat, is ook onbeheerd, zoals in het volgende voorbeeld wordt weergegeven:
using System;
public struct Coords<T>
{
public T X;
public T Y;
}
public class UnmanagedTypes
{
public static void Main()
{
DisplaySize<Coords<int>>();
DisplaySize<Coords<double>>();
}
private unsafe static void DisplaySize<T>() where T : unmanaged
{
Console.WriteLine($"{typeof(T)} is unmanaged and its size is {sizeof(T)} bytes");
}
}
// Output:
// Coords`1[System.Int32] is unmanaged and its size is 8 bytes
// Coords`1[System.Double] is unmanaged and its size is 16 bytes
Een algemene struct kan de bron zijn van zowel niet-beheerde als beheerde samengestelde typen. In het voorgaande voorbeeld wordt een algemene struct Coords<T>
gedefinieerd en worden de voorbeelden van niet-beheerde samengestelde typen weergegeven. Het voorbeeld van een beheerd type is Coords<object>
. Het wordt beheerd omdat het de velden van het object
type bevat, die wordt beheerd. Als u wilt dat alle samengestelde typen niet-beheerde typen zijn, gebruikt u de unmanaged
beperking in de definitie van een algemene struct:
public struct Coords<T> where T : unmanaged
{
public T X;
public T Y;
}
C#-taalspecificatie
Zie de sectie Aanwijzertypen van de C#-taalspecificatie voor meer informatie.