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 #

csharp
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:

text
8
8
-9223372036854775808
9223372036854775807
42
4
True
30

Mari kita bedah baris demi baris:

  1. nint.Size dan nuint.Size: kedua tipe berukuran 8 byte pada mesin 64-bit yang dipakai verifikasi.
  2. nint.MinValue dan nint.MaxValue: nilai ekstrem versi 64-bit; di platform 32-bit keduanya mengecil ke rentang 32-bit.
  3. Jumlahkan(a, b): method generik dengan syarat where T : INumber<T> menerima nint; hasilnya 42.
  4. Jumlahkan(2.5, 1.5): method yang sama melayani double, membuktikan generic math bekerja lintas tipe numerik.
  5. IsAssignableFrom: hasil True menegaskan nint kini mengimplementasikan INumber<nint>, syarat agar dipakai algoritma generik.
  6. List<nint>: native-sized integer sah sebagai type argument; penjumlahan manual menghasilkan 30.

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.