Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
Un tipo è un tipo non gestito se è uno dei tipi seguenti:
-
sbyte,byte,short,ushort,intuintlongulongnintnuint,charfloatdouble, odecimalbool - Qualsiasi tipo di enumerazione
- Qualsiasi tipo di puntatore
- Tupla i cui membri sono tutti di un tipo non gestito
- Qualsiasi tipo di struct definito dall'utente che contiene solo campi di tipi non gestiti.
È possibile usare il unmanaged vincolo per specificare che un parametro di tipo è un tipo non puntatore, non nullable non gestito.
Anche un tipo di struct costruito che contiene campi di tipi non gestiti è non gestito, come illustrato nell'esempio seguente:
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
Uno struct generico può essere l'origine di tipi costruiti non gestiti e gestiti. L'esempio precedente definisce uno struct Coords<T> generico e presenta gli esempi di tipi costruiti non gestiti. L'esempio di un tipo gestito è Coords<object>. Viene gestito perché include i campi del object tipo, che è gestito. Se si desidera che tutti i tipi costruiti siano tipi non gestiti, usare il unmanaged vincolo nella definizione di uno struct generico:
public struct Coords<T> where T : unmanaged
{
public T X;
public T Y;
}
Specificazione del linguaggio C#
Per altre informazioni, vedere la sezione Tipi di puntatore della specifica del linguaggio C#.