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, longuintdecimalfloatnuintdoubleulongnintcharnebobool
  • Libovolný typ výčtu
  • Libovolný typ ukazatele
  • Řazená kolekce členů, jejíž členy jsou všechny nespravované typy
  • Jakýkoli uživatelem definovaný typ struktury , který obsahuje pouze pole nespravovaných typů.

Pomocí omezení můžete unmanaged určit, že parametr typu je nespravovaný typ bez hodnoty null.

Vytvořený typ struktury, který obsahuje pole nespravovaných typů, je 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 spravovaných konstruovaných typů. Předchozí příklad definuje obecnou strukturu Coords<T> a představuje příklady nespravovaných konstruovaných typů. Příkladem spravovaného typu je Coords<object>. Spravuje se, protože má pole object typu, která se spravují. Pokud chcete , aby všechny konstruované 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ů specifikace jazyka C#.

Viz také