Typy niezarządzane (odwołanie w C#)

Typ jest typem niezarządzanym, jeśli jest to dowolny z następujących typów:

  • sbyte, byte, , ushortdecimaldoublefloatcharnuintulonguintnintshortintlonglubbool
  • Dowolny typ wyliczenia
  • Dowolny typ wskaźnika
  • Krotka, której składowe są typu niezarządzanego
  • Dowolny typ struktury zdefiniowany przez użytkownika, który zawiera tylko pola niezarządzanych typów.

Możesz użyć unmanaged ograniczenia , aby określić, że parametr typu jest typem, który nie jest wskaźnikiem, niepodważalnym typem niezarządzanym.

Skonstruowany typ struktury, który zawiera pola tylko typów niezarządzanych, jest również niezarządzany, jak pokazano w poniższym przykładzie:

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

Struktura ogólna może być źródłem zarówno typów niezarządzanych, jak i zarządzanych. W poprzednim przykładzie zdefiniowano ogólną strukturę Coords<T> i przedstawiono przykłady niezarządzanych typów skonstruowanych. Przykładem typu zarządzanego jest Coords<object>. Jest on zarządzany, ponieważ ma pola object typu, który jest zarządzany. Jeśli chcesz , aby wszystkie skonstruowane typy były typami niezarządzanym, użyj unmanaged ograniczenia w definicji struktury ogólnej:

public struct Coords<T> where T : unmanaged
{
    public T X;
    public T Y;
}

specyfikacja języka C#

Aby uzyskać więcej informacji, zobacz sekcję Typy wskaźników specyfikacji języka C#.

Zobacz też