형식은 다음 형식 중 한 가지인 경우 관리되지 않는 형식입니다.
-
sbyte,byte,short, ,ushort,int,uint,longulong,nint,nuint,charfloatdouble, 또는decimalbool - 모든 열거형 형식
- 모든 포인터 형식
- 멤버가 모두 관리되지 않는 형식인 튜플
- 관리되지 않는 형식의 필드만 포함하는 모든 사용자 정의 구조체 형식입니다.
제약 조건을unmanaged 사용하여 형식 매개 변수가 nullable이 아닌 비관리형 형식임을 지정할 수 있습니다.
C# 언어 참조는 가장 최근에 릴리스된 C# 언어 버전을 문서화합니다. 또한 예정된 언어 릴리스의 공개 미리 보기 기능에 대한 초기 설명서도 포함되어 있습니다.
설명서는 언어의 마지막 세 버전 또는 현재 공개 미리 보기에서 처음 도입된 기능을 식별합니다.
팁 (조언)
C#에서 기능이 처음 도입된 시기를 찾으려면 C# 언어 버전 기록에 대한 문서를 참조하세요.
다음 예제와 같이 관리되지 않는 형식의 필드만 포함하는 생성된 구조체 형식도 관리되지 않습니다.
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# 언어 사양의 포인터 형식 섹션을 참조하세요.
참고하십시오
.NET