Ohanterade typer (C#-referens)
En typ är en ohanterad typ om det är någon av följande typer:
sbyte
,byte
,short
,ushort
,int
,uint
,long
,ulong
,nint
,nuint
,char
,float
, ,double
,decimal
ellerbool
- Alla uppräkningstyper
- Valfri pekartyp
- En tupppel vars medlemmar alla är av ohanterad typ
- Alla användardefinierade structtyper som endast innehåller fält av ohanterade typer.
Du kan använda villkoret unmanaged
för att ange att en typparameter är en icke-pekare, icke-nullbar ohanterad typ.
En konstruerad structtyp som endast innehåller fält av ohanterade typer är också ohanterad, vilket visas i följande exempel:
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
En allmän struct kan vara källan till både ohanterade och hanterade konstruerade typer. Föregående exempel definierar en allmän struct Coords<T>
och visar exempel på ohanterade konstruktionstyper. Exemplet på en hanterad typ är Coords<object>
. Den hanteras eftersom den har fälten av typen object
, som hanteras. Om du vill att alla konstruerade typer ska vara ohanterade typer använder du villkoret unmanaged
i definitionen av en allmän struct:
public struct Coords<T> where T : unmanaged
{
public T X;
public T Y;
}
Språkspecifikation för C#
Mer information finns i avsnittet Pekartyper i C#-språkspecifikationen.