Jenis tidak terkelola (referensi C#)
Jenis adalah jenis tidak terkelola jika merupakan salah satu jenis berikut:
sbyte
, ,byte
,ushort
short
,int
,uint
long
, ,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#.