비관리형 형식(C# 참조)
형식이 다음 형식 중 하나인 경우에는 관리되지 않는 형식입니다.
sbyte
,byte
,short
,ushort
,int
,uint
,long
,ulong
,nint
,nuint
,char
,float
,double
,decimal
, 또는bool
- 임의의 열거형 형식
- 임의의 포인터 형식
- 멤버가 모두 관리되지 않는 형식인 튜플
- 관리되지 않는 형식의 필드만 포함하는 임의의 사용자 정의 구조체 형식
unmanaged
제약 조건을 사용하여 형식 매개 변수가 nullable이 아니며 비포인터 및 비관리형 형식임을 지정할 수 있습니다.
다음 예와 같이 관리되지 않는 형식의 필드만 포함하는 생성된 구조체 형식도 관리되지 않습니다.
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# 언어 사양의 포인터 형식 섹션을 참조하세요.
참고 항목
GitHub에서 Microsoft와 공동 작업
이 콘텐츠의 원본은 GitHub에서 찾을 수 있으며, 여기서 문제와 끌어오기 요청을 만들고 검토할 수도 있습니다. 자세한 내용은 참여자 가이드를 참조하세요.
.NET