Condividi tramite


Tipi non gestiti (riferimenti per C#)

Un tipo è un tipo non gestito se è uno dei tipi seguenti:

  • sbyte, byte, short, ushort, intuintlongulongnintnuint, charfloatdouble, o decimalbool
  • 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.

Il riferimento al linguaggio C# documenta la versione rilasciata più di recente del linguaggio C#. Contiene anche la documentazione iniziale per le funzionalità nelle anteprime pubbliche per la versione futura del linguaggio.

La documentazione identifica tutte le funzionalità introdotte nelle ultime tre versioni della lingua o nelle anteprime pubbliche correnti.

Suggerimento

Per trovare quando una funzionalità è stata introdotta per la prima volta in C#, vedere l'articolo sulla cronologia delle versioni del linguaggio C#.

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ò definire tipi costruiti non gestiti e gestiti. L'esempio precedente definisce uno struct Coords<T> generico e presenta 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#.

Vedere anche