다음을 통해 공유


관리되지 않는 형식(C# 참조)

형식은 다음 형식 중 한 가지인 경우 관리되지 않는 형식입니다.

  • sbyte, byte,short, , ushort, int, uint, longulong, nint, nuint, charfloatdouble, 또는 decimalbool
  • 모든 열거형 형식
  • 모든 포인터 형식
  • 멤버가 모두 관리되지 않는 형식인 튜플
  • 관리되지 않는 형식의 필드만 포함하는 모든 사용자 정의 구조체 형식입니다.

제약 조건을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# 언어 사양포인터 형식 섹션을 참조하세요.

참고하십시오