Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
Um tipo é um tipo não gerenciado se for qualquer um dos seguintes tipos:
-
sbyte,byte,short,ushort, ,int,uint, ,long,ulong,nint,nuint, ,char,float,double, oudecimalbool - Qualquer tipo de enumeração
- Qualquer tipo de ponteiro
- Uma tupla cujos membros são todos de um tipo não gerenciado
- Qualquer tipo de 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 de tipo é um tipo não gerenciado sem ponteiro e não anulável.
Um tipo de struct construído que contém 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
Um struct genérico pode ser a origem de tipos construídos não gerenciados e não gerenciados. O exemplo anterior define um struct Coords<T> genérico 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 você quiser que todos os tipos construídos sejam tipos não gerenciados, use a unmanaged restrição na definição de um struct genérico:
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#.