Nicht verwaltete Typen (C#-Verweis)
Ein Typ ist ein nicht verwalteter Typ, wenn es sich um einen der folgenden Typen handelt:
sbyte
,byte
,short
,ushort
,int
,uint
,long
,ulong
,nint
,nuint
,char
,float
,double
,decimal
oderbool
- Beliebiger Enumerationstyp
- Beliebiger Zeigertyp
- Ein Tupel, dessen Member alle einen nicht verwalteten Typ besitzen
- Beliebiger benutzerdefinierter Strukturtyp, der nur Felder von nicht verwalteten Typen enthält.
Sie können die unmanaged
-Einschränkung verwenden, um anzugeben, dass ein Typparameter ein nicht verwalteter Nicht-Nullable-Nichtzeigertyp ist.
Ein konstruierter Strukturtyp, der Felder mit nicht verwalteten Typen enthält, ist ebenfalls nicht verwaltet, wie das folgende Beispiel zeigt:
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 als Quelle sowohl für nicht verwaltete als auch für verwaltete konstruierte Typen dienen. Das oben stehende Beispiel definiert die generische Struktur Coords<T>
und zeigt Beispiele nicht verwalteter konstruierter Typen. Ein Beispiel für einen verwalteten Typ ist Coords<object>
. Der Typ ist verwaltet, weil er Felder des Typs object
enthält, der verwaltet ist. Wenn alle konstruierten Typen nicht verwaltet sein 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 Spezifikation für die Sprache C#.