Uwaga
Dostęp do tej strony wymaga autoryzacji. Może spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Typ jest typem niezarządzanym, jeśli jest to dowolny z następujących typów:
sbyte
,byte
, ,ushort
decimal
double
float
char
nuint
ulong
uint
nint
short
int
long
lubbool
- Dowolny typ wyliczenia
- Dowolny typ wskaźnika
- Krotka, której składowe są typu niezarządzanego
- Dowolny typ struktury zdefiniowany przez użytkownika, który zawiera tylko pola niezarządzanych typów.
Możesz użyć unmanaged
ograniczenia , aby określić, że parametr typu jest typem, który nie jest wskaźnikiem, niepodważalnym typem niezarządzanym.
Skonstruowany typ struktury, który zawiera pola tylko typów niezarządzanych, jest również niezarządzany, jak pokazano w poniższym przykładzie:
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
Struktura ogólna może być źródłem zarówno typów niezarządzanych, jak i zarządzanych. W poprzednim przykładzie zdefiniowano ogólną strukturę Coords<T>
i przedstawiono przykłady niezarządzanych typów skonstruowanych. Przykładem typu zarządzanego jest Coords<object>
. Jest on zarządzany, ponieważ ma pola object
typu, który jest zarządzany. Jeśli chcesz , aby wszystkie skonstruowane typy były typami niezarządzanym, użyj unmanaged
ograniczenia w definicji struktury ogólnej:
public struct Coords<T> where T : unmanaged
{
public T X;
public T Y;
}
specyfikacja języka C#
Aby uzyskać więcej informacji, zobacz sekcję Typy wskaźników specyfikacji języka C#.