nint``nuinta – typy (Referenční příručka jazyka C#)
Počínaje jazykem C# 9.0 můžete pomocí klíčových slov a definovat celočíselná čísla nint nuint nativní velikosti. Jedná se o 32bitová celá čísla při spuštění v 32bitovém procesu nebo 64bitová celá čísla při spuštění v 64bitovém procesu. Lze je použít ve scénářích spolupráce, knihovnách nízké úrovně a k optimalizaci výkonu ve scénářích, kde se celočíselná matematika používá ve velké části.
Celočíselné typy nativní velikosti jsou interně reprezentovány jako typy .NET a System.IntPtr System.UIntPtr . Na rozdíl od jiných číselných typů nejsou klíčová slova jednoduše aliasy pro typy. Následující příkazy nejsou ekvivalentní:
nint a = 1;
System.IntPtr a = 1;
Kompilátor poskytuje operace a převody pro a nint , které jsou vhodné pro nuint celočíselné typy.
Nativní celočíselná velikost za běhu
K získání velikosti celého čísla nativní velikosti za běhu můžete použít sizeof() . Kód však musí být zkompilován v nezabezpečeném kontextu. Například:
Console.WriteLine($"size of nint = {sizeof(nint)}");
Console.WriteLine($"size of nuint = {sizeof(nuint)}");
// output when run in a 64-bit process
//size of nint = 8
//size of nuint = 8
// output when run in a 32-bit process
//size of nint = 4
//size of nuint = 4
Ekvivalentní hodnotu můžete získat také ze statických IntPtr.Size vlastností UIntPtr.Size a .
MinValue a MaxValue
Pokud chcete získat minimální a maximální hodnoty celých čísel nativní velikosti za běhu, použijte a jako statické vlastnosti s klíčovými slovy a jako v MinValue MaxValue následujícím nint nuint příkladu:
Console.WriteLine($"nint.MinValue = {nint.MinValue}");
Console.WriteLine($"nint.MaxValue = {nint.MaxValue}");
Console.WriteLine($"nuint.MinValue = {nuint.MinValue}");
Console.WriteLine($"nuint.MaxValue = {nuint.MaxValue}");
// output when run in a 64-bit process
//nint.MinValue = -9223372036854775808
//nint.MaxValue = 9223372036854775807
//nuint.MinValue = 0
//nuint.MaxValue = 18446744073709551615
// output when run in a 32-bit process
//nint.MinValue = -2147483648
//nint.MaxValue = 2147483647
//nuint.MinValue = 0
//nuint.MaxValue = 4294967295
Konstanty
Konstantní hodnoty můžete použít v následujících rozsahech:
- Pro
nint: Int32.MinValue do Int32.MaxValue . - Pro
nuint: UInt32.MinValue do UInt32.MaxValue .
Převody
Kompilátor poskytuje implicitní a explicitní převody na jiné číselné typy. Další informace najdete v tématu Předdefinování číselných převodů.
Literály
Pro celočíselné literály nativní velikosti neexistuje žádná přímá syntaxe. Neexistuje žádná přípona k označení, že literál je celé číslo nativní velikosti, například k L označení long . Místo toho můžete použít implicitní nebo explicitní přetypování jiných celočíselných hodnot. Například:
nint a = 42
nint a = (nint)42;
Nepodporované členy IntPtr/UIntPtr
Následující členy a IntPtr nejsou podporovány pro typy a UIntPtr nint nuint :
- Parametrizované konstruktory
- Add(IntPtr, Int32)
- CompareTo
- Size– Místo toho použijte sizeOf(). I
nint.Sizekdyž se nepodporuje, můžete k získání ekvivalentníIntPtr.Sizehodnoty použít . - Subtract(IntPtr, Int32)
- ToInt32
- ToInt64
- ToPointer
- Zero – Místo toho použijte 0.
specifikace jazyka C#
Další informace najdete ve specifikaci jazyka C# a v části Celočíselná čísla v nativní velikosti v poznámkách k návrhu funkce C# 9.0.