Nem felügyelt típusok (C#-referencia)

A típus nem felügyelt típus , ha az alábbi típusok valamelyike:

  • sbyte, byte, short, ushort, int, uint, long, ulongnint, , nuint, char, float, , double, , decimalvagybool
  • Tetszőleges enumerálási típus
  • Bármilyen mutatótípus
  • Olyan tuple, amelynek tagjai mind nem felügyelt típusúak
  • Minden olyan felhasználó által definiált szerkezettípus , amely csak nem felügyelt típusú mezőket tartalmaz.

A kényszer használatával unmanaged megadhatja, hogy egy típusparaméter nem mutató, nem null értékű nem felügyelt típus.

Az olyan strukturált szerkezettípus, amely csak nem felügyelt típusú mezőket tartalmaz, szintén nem felügyelt, ahogyan az alábbi példa is mutatja:

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

Az általános szerkezet lehet a nem felügyelt és a felügyelt strukturált típusok forrása is. Az előző példa egy általános szerkezetet Coords<T> határoz meg, és bemutatja a nem felügyelt strukturált típusok példáit. A felügyelt típusra példa: Coords<object>. Azért van felügyelve, mert a típus mezői object vannak kezelve. Ha azt szeretné , hogy az összes létrehozott típus nem felügyelt típusok legyenek, használja a unmanaged korlátozást egy általános szerkezet definíciójában:

public struct Coords<T> where T : unmanaged
{
    public T X;
    public T Y;
}

C# nyelvspecifikáció

További információ: A C# nyelv specifikációjának Mutatótípusok szakasza.

Lásd még