Notes
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
Un type est un type non managé s’il s’agit de l’un des types suivants :
-
sbyte
, ,byte
short
uint
int
ushort
, ,long
ulong
nint
nuint
char
float
double
decimal
bool
- N’importe quel type d’énumération
- N’importe quel type de pointeur
- Tuple dont les membres sont tous d’un type non managé
- Tout type de struct défini par l’utilisateur qui contient des champs de types non managés uniquement.
Vous pouvez utiliser la unmanaged
contrainte pour spécifier qu’un paramètre de type est un type non-pointeur, non nullable non managé.
Un type de struct construit qui contient des champs de types non managés est également non géré, comme l’illustre l’exemple suivant :
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
Un struct générique peut être la source des types construits non managés et managés. L’exemple précédent définit un struct Coords<T>
générique et présente les exemples de types construits non managés. L’exemple d’un type managé est Coords<object>
. Il est géré, car il a les champs du object
type, qui est géré. Si vous souhaitez que tous les types construits soient des types non managés, utilisez la unmanaged
contrainte dans la définition d’un struct générique :
public struct Coords<T> where T : unmanaged
{
public T X;
public T Y;
}
Spécification du langage C#
Pour plus d’informations, consultez la section Types de pointeur de la spécification du langage C#.