Примечание
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Тип является неуправляемым типом , если это любой из следующих типов:
-
sbyte
,byte
,short
ushort
int
uint
long
ulong
nint
nuint
char
float
double
decimal
bool
- Любой тип перечисления
- Любой тип указателя
- Кортеж, члены которого являются неуправляемым типом
- Любой определяемый пользователем тип структуры , содержащий только поля неуправляемых типов.
Ограничение можно использовать unmanaged
для указания того, что параметр типа является неуправляемым типом, не допускающим значение NULL.
Созданный тип структуры, содержащий поля неуправляемых типов, также неуправляемый, как показано в следующем примере:
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
Универсальная структура может быть источником неуправляемых и управляемых типов. Предыдущий пример определяет универсальную структуру Coords<T>
и представляет примеры неуправляемых созданных типов. Пример управляемого типа: Coords<object>
. Он управляется, так как он имеет поля типа, управляемого object
. Если вы хотите, чтобы все созданные типы были неуправляемы, используйте unmanaged
ограничение в определении универсальной структуры:
public struct Coords<T> where T : unmanaged
{
public T X;
public T Y;
}
Спецификация языка C#
Дополнительные сведения см. в разделе типов указателейспецификации языка C#.