Udostępnij przez


Typy niezarządzane (odwołanie w C#)

Typ jest typem niezarządzanym , jeśli jest to dowolny z następujących typów:

  • sbyte, byte, , shortushortintuintlongulongnintnuintcharfloatdoubledecimallubbool
  • Dowolny typ wyliczenia
  • Dowolny typ wskaźnika
  • Krotka, której składowe są typu niezarządzanego
  • Dowolny typ struktury zdefiniowany przez użytkownika, który zawiera tylko pola niezarządzanych typów.

Możesz użyć unmanaged ograniczenia , aby określić, że parametr typu jest typem, który nie jest wskaźnikiem, niepodważalnym typem niezarządzanym.

Dokumentacja języka C# zawiera ostatnio wydaną wersję języka C#. Zawiera również początkową dokumentację funkcji w publicznej wersji zapoznawczej nadchodzącej wersji językowej.

Dokumentacja identyfikuje dowolną funkcję po raz pierwszy wprowadzoną w ostatnich trzech wersjach języka lub w bieżącej publicznej wersji zapoznawczej.

Wskazówka

Aby dowiedzieć się, kiedy funkcja została po raz pierwszy wprowadzona w języku C#, zapoznaj się z artykułem dotyczącym historii wersji języka C#.

Skonstruowany typ struktury, który zawiera pola tylko typów niezarządzanych, jest również niezarządzany, jak pokazano w poniższym przykładzie:

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

Struktura ogólna może definiować zarówno typy niezarządzane, jak i zarządzane. W poprzednim przykładzie zdefiniowano ogólną strukturę Coords<T> i przedstawiono przykłady niezarządzanych typów skonstruowanych. Przykładem typu zarządzanego jest Coords<object>. Jest on zarządzany, ponieważ ma pola object typu, który jest zarządzany. Jeśli chcesz, aby wszystkie skonstruowane typy były typami niezarządzanym, użyj unmanaged ograniczenia w definicji struktury ogólnej:

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

Specyfikacja języka C#

Aby uzyskać więcej informacji, zobacz sekcję Typy wskaźnikówspecyfikacji języka C#.

Zobacz także