Freigeben über


Nicht verwaltete Typen (C#-Verweis)

Ein Typ ist ein nicht verwalteter Typ , wenn es sich um einen der folgenden Typen handelt:

Sie können die unmanaged Einschränkung verwenden, um anzugeben, dass ein Typparameter ein nicht zeigerfreier, nicht nullwertiger nicht verwalteter Typ ist.

Ein konstruierter Strukturtyp, der nur Felder nicht verwalteter Typen enthält, ist ebenfalls nicht verwaltet, wie im folgenden Beispiel gezeigt:

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

Eine generische Struktur kann die Quelle von nicht verwalteten und verwalteten erstellten Typen sein. Im vorherigen Beispiel wird eine generische Struktur Coords<T> definiert und die Beispiele für nicht verwaltete konstruierte Typen dargestellt. Das Beispiel für einen verwalteten Typ ist Coords<object>. Sie wird verwaltet, da sie über die Felder des object Typs verfügt, die verwaltet werden. Wenn alle konstruierten Typen nicht verwaltet werden sollen, verwenden Sie die unmanaged Einschränkung in der Definition einer generischen Struktur:

public struct Coords<T> where T : unmanaged
{
    public T X;
    public T Y;
}

C#-Sprachspezifikation

Weitere Informationen finden Sie im Abschnitt " Zeigertypen " der C#-Sprachspezifikation.

Siehe auch