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 , decimal nebo bool
  • 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#.

Viz také