Share via


Niet-beheerde typen (C#-verwijzing)

Een type is een niet-beheerd type als dit een van de volgende typen is:

  • sbyte, , short, , ushort, , int, , , nuintfloatulongdoublecharnintdecimaluintlongbytebool
  • 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.

Zie ook