Bagikan melalui


Jenis tidak terkelola (referensi C#)

Jenis adalah jenis tidak terkelola jika merupakan salah satu jenis berikut:

  • sbyte, , byte, ushortshort, int, uintlong, , ulong, nint, nuint, char, , float, double, , decimal, ataubool
  • Semua jenis enum
  • Semua jenis penunjuk
  • Tuple yang anggotanya adalah semua jenis yang tidak dikelola
  • Jenis struct yang ditentukan pengguna yang hanya berisi bidang jenis yang tidak dikelola.

Anda dapat menggunakan unmanaged batasan untuk menentukan bahwa parameter jenis adalah jenis tidak terkelola non-pointer dan tidak dapat diubah ke null.

Jenis struktur yang dibangun yang berisi bidang jenis yang tidak dikelola saja juga tidak dikelola, seperti yang ditunjukkan contoh berikut:

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

Struktur generik mungkin merupakan sumber dari jenis konstruksi yang tidak terkelola dan terkelola. Contoh sebelumnya mendefinisikan struktur Coords<T> generik dan menyajikan contoh jenis konstruksi yang tidak terkelola. Contoh dari jenis terkelola adalah Coords<object>. Ini dikelola karena memiliki bidang jenis object, yang dikelola. Jika Anda ingin semua jenis yang dibangun menjadi jenis tidak terkelola, gunakan batasan unmanaged dalam definisi struktur generik:

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

Spesifikasi bahasa C#

Untuk informasi selengkapnya, lihat bagian Jenis penunjuk dari spesifikasi bahasa C#.

Lihat juga