Nota
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
Un tipo es un tipo no administrado si es cualquiera de los siguientes tipos:
-
sbyte,byte,short,ushort, ,int,uintlong,ulongnintnuintcharfloat,double, odecimalbool - 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.
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 ser el origen de tipos construidos no administrados y administrados. En el ejemplo anterior se define una estructura Coords<T> genérica y se presentan los 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#.