Поделиться через


Справочник по C#. Неуправляемые типы

Тип является неуправляемым типом, если он принадлежит к одному из следующих типов:

Ограничение можно использовать unmanaged для указания того, что параметр типа является неуправляемым типом, не допускающим значение NULL.

Созданный тип структуры, содержащий поля неуправляемых типов, также неуправляемый, как показано в следующем примере:

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

Универсальная структура может быть источником как для неуправляемых, так и для управляемых сконструированных типов. В предыдущем примере определяется универсальная структура Coords<T>, а также представлены примеры неуправляемых сконструированных типов. Примером управляемого типа является Coords<object>. Он управляемый, так как содержит поля типа object, которые являются управляемыми. Если необходимо, чтобы все сконструированные типы были неуправляемыми, используйте ограничение unmanaged в определении универсальной структуры:

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

Спецификация языка C#

Дополнительные сведения см. в разделе Типы указателей в статье Спецификации языка C#.

См. также