Nespravované typy (Referenční dokumentace jazyka C#)
Typ je nespravovaný typ , pokud se jedná o některý z následujících typů:
sbyte,byte,short,ushort,int,uint,long,ulong,char,float,double,decimalnebobool- Libovolný typ výčtu
- Libovolný typ ukazatele
- Libovolný uživatelsky definovaný typ struktury , který obsahuje pouze pole nespravovaných typů a v jazyce C# 7,3 a starší není konstruovaný typ (typ, který obsahuje alespoň jeden argument typu).
Počínaje jazykem C# 7,3 můžete použít unmanaged omezení , chcete-li určit, že parametr typu je nespravovaný typ bez hodnoty null.
Počínaje jazykem C# 8,0 je typ konstruované struktury obsahující pole pouze nespravovaných typů také nespravovaný, jak ukazuje následující příklad:
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
Obecná struktura může být zdrojem nespravovaných i nespravovaných konstruovaných typů. Předchozí příklad definuje obecnou strukturu Coords<T> a prezentuje příklady nespravovaných konstruovaných typů. Příkladem nespravovaného typu je Coords<object> . Není nespravované, protože má pole object typu, která nejsou nespravována. Pokud chcete, aby všechny vytvořené typy byly nespravované typy, použijte unmanaged omezení v definici obecné struktury:
public struct Coords<T> where T : unmanaged
{
public T X;
public T Y;
}
specifikace jazyka C#
Další informace naleznete v části typy ukazatelů v tématu specifikace jazyka C#.