Compartir a través de


Tipos no administrados (referencia de C#)

Un tipo es un tipo no administrado si es cualquiera de los siguientes tipos:

  • sbyte, byte, short, ushort, , int, uintlong, ulongnintnuintcharfloat, double, o decimalbool
  • Cualquier tipo de enumeración
  • Cualquier tipo de puntero
  • Una tupla cuyos miembros son todos de un tipo no administrado
  • Cualquier tipo de estructura definido por el usuario que contenga solo campos de tipos no administrados.

Puede usar la unmanaged restricción para especificar que un parámetro de tipo es un tipo no administrado que no admite valores NULL.

La referencia del lenguaje C# documenta la versión publicada más recientemente del lenguaje C#. También contiene documentación inicial sobre las características de las versiones preliminares públicas de la próxima versión del lenguaje.

La documentación identifica cualquier característica introducida por primera vez en las últimas tres versiones del idioma o en las versiones preliminares públicas actuales.

Sugerencia

Para buscar cuándo se introdujo por primera vez una característica en C#, consulte el artículo sobre el historial de versiones del lenguaje C#.

Un tipo de estructura construido que contiene campos de tipos no administrados solo es no administrado, como se muestra en el ejemplo siguiente:

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

Una estructura genérica puede definir tipos construidos no administrados y administrados. En el ejemplo anterior se define una estructura Coords<T> genérica y se presentan ejemplos de tipos construidos no administrados. El ejemplo de un tipo administrado es Coords<object>. Se administra porque tiene los campos del object tipo , que se administran. Si desea que todos los tipos construidos sean tipos no administrados, use la unmanaged restricción en la definición de una estructura genérica:

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

Especificación del lenguaje C#

Para obtener más información, consulte la sección Tipos de puntero de la especificación del lenguaje C#.

Consulte también