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.

Referensi bahasa C# mendanai versi bahasa C# yang terbaru dirilis. Ini juga berisi dokumentasi awal untuk fitur dalam pratinjau publik untuk rilis bahasa yang akan datang.

Dokumentasi mengidentifikasi fitur apa pun yang pertama kali diperkenalkan dalam tiga versi terakhir bahasa atau dalam pratinjau publik saat ini.

Tip

Untuk menemukan kapan fitur pertama kali diperkenalkan di C#, lihat artikel tentang riwayat versi bahasa C#.

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 dapat menentukan 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