Nota
O acesso a esta página requer autorização. Pode tentar iniciar sessão ou alterar os diretórios.
O acesso a esta página requer autorização. Pode tentar alterar os diretórios.
Um tipo é um tipo não gerenciado se for qualquer um dos seguintes tipos:
-
sbyte,byte, ,short,ushort,intuintlongulongnint, ounuintcharfloatdoubledecimalbool - Qualquer tipo de enum
- Qualquer tipo de ponteiro
- Uma tupla cujos membros são todos de um tipo não gerenciado
- Qualquer tipo struct definido pelo usuário que contenha apenas campos de tipos não gerenciados.
Você pode usar a unmanaged restrição para especificar que um parâmetro type é um tipo não gerenciado não ponteiro e não anulável.
Um tipo struct construído que contém apenas campos de tipos não gerenciados também não é gerenciado, como mostra o exemplo a seguir:
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
Uma estrutura genérica pode ser a origem de tipos construídos não gerenciados e gerenciados. O exemplo anterior define uma struct Coords<T> genérica e apresenta os exemplos de tipos construídos não gerenciados. O exemplo de um tipo gerenciado é Coords<object>. Ele é gerenciado porque tem os campos do object tipo, que é gerenciado. Se desejar que todos os tipos construídos sejam tipos não gerenciados, use a unmanaged restrição na definição de uma estrutura genérica:
public struct Coords<T> where T : unmanaged
{
public T X;
public T Y;
}
Especificação da linguagem C#
Para obter mais informações, consulte a seção Tipos de ponteiro da especificação da linguagem C#.