Bab sebelumnya memperlakukan nint dan nuint sebagai alias praktis untuk IntPtr dan UIntPtr. C# 11 memperkuat kedudukan keduanya: sekarang disebut native-sized integers, kedua tipe berpartisipasi penuh dalam sistem tipe, termasuk konteks generik yang menuntut antarmuka numerik. Perubahan ini penting ketika kita menulis kode generik matematika sebagaimana dibahas pada section Generics.
Perubahan dari C# 9 ke C# 11 #
Pada C# 9, nint hanyalah nama lain sehingga sebagian konteks generik tidak mengenalnya sebagai tipe numerik. Sejak C# 11, compiler dan runtime memperlakukan nint sebagai tipe utuh yang mengimplementasikan antarmuka seperti INumber<nint>, mengikuti rencana generic math. Ukurannya tetap mengikuti platform, sehingga nilai ekstremnya berbeda antara prosesor 32-bit dan 64-bit.
Contoh: nint di Konteks Generik #
Console.WriteLine(nint.Size);
Console.WriteLine(nuint.Size);
Console.WriteLine(nint.MinValue);
Console.WriteLine(nint.MaxValue);
nint a = 30;
nint b = 12;
Console.WriteLine(Jumlahkan(a, b));
Console.WriteLine(Jumlahkan(2.5, 1.5));
Console.WriteLine(typeof(INumber<nint>).IsAssignableFrom(typeof(nint)));
List<nint> riwayat = [10, 20];
nint total = 0;
foreach (nint n in riwayat)
{
total += n;
}
Console.WriteLine(total);Output yang Dihasilkan:
8
8
-9223372036854775808
9223372036854775807
42
4
True
30Mari kita bedah baris demi baris:
nint.Sizedannuint.Size: kedua tipe berukuran8byte pada mesin 64-bit yang dipakai verifikasi.nint.MinValuedannint.MaxValue: nilai ekstrem versi 64-bit; di platform 32-bit keduanya mengecil ke rentang 32-bit.Jumlahkan(a, b): method generik dengan syaratwhere T : INumber<T>menerimanint; hasilnya42.Jumlahkan(2.5, 1.5): method yang sama melayanidouble, membuktikan generic math bekerja lintas tipe numerik.IsAssignableFrom: hasilTruemenegaskannintkini mengimplementasikanINumber<nint>, syarat agar dipakai algoritma generik.List<nint>: native-sized integer sah sebagai type argument; penjumlahan manual menghasilkan30.
Makna Praktisnya #
Kini algoritma generik seperti penjumlahan, pengurutan, atau interpolasi dapat menerima nint tanpa overload khusus per tipe. Pustaka performa tinggi memanfaatkan hal ini untuk melayani pointer aritmetika dan tipe numerik biasa lewat satu kode yang sama. Untuk kode aplikasi sehari-hari, keputusan memakai nint tetap bertumpu pada kebutuhan interop dan perhitungan alamat sebagaimana dibahas bab sebelumnya.