Bagikan melalui


Jenis tidak terkelola (referensi C#)

Jenis adalah jenis yang tidak dikelola jika merupakan salah satu jenis berikut:

  • sbyte, , byte, shortushort, int, uintlong, , ulong, nint, nuint, char, , float, double, , decimal, ataubool
  • Jenis enum apa pun
  • Jenis penunjuk apa pun
  • 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 dikelola dan dikelola. Contoh sebelumnya mendefinisikan struktur Coords<T> generik dan menyajikan contoh jenis konstruksi yang tidak dikelola. Contoh jenis terkelola adalah Coords<object>. Ini dikelola karena memiliki bidang jenis object , yang dikelola. Jika Anda ingin semua jenis yang dibangun menjadi jenis yang tidak dikelola, gunakan unmanaged batasan 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