จำนวนเต็มเนทิฟ nint
และ nuint
ที่ตรงไปตรงมา เขียนด้วย IL ซึ่งอาจดีที่สุดเป็นอันดับสองรองจากการสนับสนุนคอมไพเลอร์ที่เหมาะสม ใช้งานได้เต็มประสิทธิภาพ
DotNetCross.NativeInts
https://www.nuget.org/packages/DotNetCross.NativeInts
nint
API public struct nint : IEquatable < nint > , IComparable < nint >
{
public static readonly nint Zero ;
public IntPtr Value ;
public nint ( IntPtr value ) ;
public nint ( int value ) ;
public nint ( long value ) ;
public int CompareTo ( nint other ) ;
public override bool Equals ( object obj ) ;
public bool Equals ( nint other ) ;
public override int GetHashCode ( ) ;
public override string ToString ( ) ;
public static nint operator + ( nint value ) ;
public static nint operator + ( nint l , nint r ) ;
public static nint operator + ( nint l , int r ) ;
public static nint operator + ( int l , nint r ) ;
public static nint operator - ( nint value ) ;
public static nint operator - ( nint l , int r ) ;
public static nint operator - ( nint l , nint r ) ;
public static nint operator - ( int l , nint r ) ;
public static nint operator ~ ( nint value ) ;
public static nint operator ++ ( nint value ) ;
public static nint operator -- ( nint value ) ;
public static nint operator * ( nint l , nint r ) ;
public static nint operator * ( nint l , int r ) ;
public static nint operator / ( nint l , int r ) ;
public static nint operator / ( nint l , nint r ) ;
public static nint operator % ( nint l , nint r ) ;
public static nint operator % ( nint l , int r ) ;
public static nint operator & ( nint l , int r ) ;
public static nint operator & ( nint l , nint r ) ;
public static nint operator | ( nint l , nint r ) ;
public static nint operator | ( nint l , int r ) ;
public static nint operator ^ ( nint l , nint r ) ;
public static nint operator ^ ( nint l , int r ) ;
public static nint operator << ( nint l , nint r ) ;
public static nint operator << ( nint l , int r ) ;
public static nint operator >> ( nint l , nint r ) ;
public static nint operator >> ( nint l , int r ) ;
public static bool operator == ( IntPtr l , nint r ) ;
public static bool operator == ( nint l , IntPtr r ) ;
public static bool operator == ( nint l , long r ) ;
public static bool operator == ( long l , nint r ) ;
public static bool operator == ( nint l , int r ) ;
public static bool operator == ( nint l , nint r ) ;
public static bool operator == ( int l , nint r ) ;
public static bool operator != ( IntPtr l , nint r ) ;
public static bool operator != ( long l , nint r ) ;
public static bool operator != ( nint l , IntPtr r ) ;
public static bool operator != ( nint l , long r ) ;
public static bool operator != ( int l , nint r ) ;
public static bool operator != ( nint l , int r ) ;
public static bool operator != ( nint l , nint r ) ;
public static bool operator < ( IntPtr l , nint r ) ;
public static bool operator < ( nint l , IntPtr r ) ;
public static bool operator < ( long l , nint r ) ;
public static bool operator < ( nint l , long r ) ;
public static bool operator < ( int l , nint r ) ;
public static bool operator < ( nint l , nint r ) ;
public static bool operator < ( nint l , int r ) ;
public static bool operator > ( IntPtr l , nint r ) ;
public static bool operator > ( long l , nint r ) ;
public static bool operator > ( nint l , long r ) ;
public static bool operator > ( int l , nint r ) ;
public static bool operator > ( nint l , int r ) ;
public static bool operator > ( nint l , nint r ) ;
public static bool operator > ( nint l , IntPtr r ) ;
public static bool operator <= ( nint l , int r ) ;
public static bool operator <= ( IntPtr l , nint r ) ;
public static bool operator <= ( nint l , IntPtr r ) ;
public static bool operator <= ( long l , nint r ) ;
public static bool operator <= ( nint l , long r ) ;
public static bool operator <= ( int l , nint r ) ;
public static bool operator <= ( nint l , nint r ) ;
public static bool operator >= ( nint l , nint r ) ;
public static bool operator >= ( nint l , IntPtr r ) ;
public static bool operator >= ( long l , nint r ) ;
public static bool operator >= ( nint l , long r ) ;
public static bool operator >= ( int l , nint r ) ;
public static bool operator >= ( nint l , int r ) ;
public static bool operator >= ( IntPtr l , nint r ) ;
public static implicit operator long ( nint value ) ;
public static implicit operator IntPtr ( nint value ) ;
public static implicit operator nint ( int value ) ;
public static implicit operator nint ( IntPtr value ) ;
public static explicit operator nint ( long value ) ;
public static explicit operator int ( nint value ) ;
}
nuint
API public struct nuint : IEquatable < nuint > , IComparable < nuint >
{
public static readonly nuint Zero ;
public UIntPtr Value ;
public nuint ( UIntPtr value ) ;
public nuint ( uint value ) ;
public nuint ( ulong value ) ;
public int CompareTo ( nuint other ) ;
public override bool Equals ( object obj ) ;
public bool Equals ( nuint other ) ;
public override int GetHashCode ( ) ;
public override string ToString ( ) ;
public static nuint operator + ( nuint value ) ;
public static nuint operator + ( nuint l , nuint r ) ;
public static nuint operator + ( nuint l , uint r ) ;
public static nuint operator + ( uint l , nuint r ) ;
public static nuint operator - ( nuint l , uint r ) ;
public static nuint operator - ( nuint l , nuint r ) ;
public static nuint operator - ( uint l , nuint r ) ;
public static nuint operator ~ ( nuint value ) ;
public static nuint operator ++ ( nuint value ) ;
public static nuint operator -- ( nuint value ) ;
public static nuint operator * ( nuint l , nuint r ) ;
public static nuint operator * ( nuint l , uint r ) ;
public static nuint operator / ( nuint l , nuint r ) ;
public static nuint operator / ( nuint l , uint r ) ;
public static nuint operator % ( nuint l , nuint r ) ;
public static nuint operator % ( nuint l , uint r ) ;
public static nuint operator & ( nuint l , uint r ) ;
public static nuint operator & ( nuint l , nuint r ) ;
public static nuint operator | ( nuint l , uint r ) ;
public static nuint operator | ( nuint l , nuint r ) ;
public static nuint operator ^ ( nuint l , uint r ) ;
public static nuint operator ^ ( nuint l , nuint r ) ;
public static nuint operator << ( nuint l , nuint r ) ;
public static nuint operator << ( nuint l , uint r ) ;
public static nuint operator >> ( nuint l , nuint r ) ;
public static nuint operator >> ( nuint l , uint r ) ;
public static bool operator == ( nuint l , UIntPtr r ) ;
public static bool operator == ( UIntPtr l , nuint r ) ;
public static bool operator == ( nuint l , ulong r ) ;
public static bool operator == ( ulong l , nuint r ) ;
public static bool operator == ( nuint l , uint r ) ;
public static bool operator == ( nuint l , nuint r ) ;
public static bool operator == ( uint l , nuint r ) ;
public static bool operator != ( UIntPtr l , nuint r ) ;
public static bool operator != ( ulong l , nuint r ) ;
public static bool operator != ( nuint l , UIntPtr r ) ;
public static bool operator != ( nuint l , ulong r ) ;
public static bool operator != ( uint l , nuint r ) ;
public static bool operator != ( nuint l , uint r ) ;
public static bool operator != ( nuint l , nuint r ) ;
public static bool operator < ( UIntPtr l , nuint r ) ;
public static bool operator < ( nuint l , UIntPtr r ) ;
public static bool operator < ( ulong l , nuint r ) ;
public static bool operator < ( nuint l , ulong r ) ;
public static bool operator < ( uint l , nuint r ) ;
public static bool operator < ( nuint l , nuint r ) ;
public static bool operator < ( nuint l , uint r ) ;
public static bool operator > ( UIntPtr l , nuint r ) ;
public static bool operator > ( ulong l , nuint r ) ;
public static bool operator > ( nuint l , ulong r ) ;
public static bool operator > ( uint l , nuint r ) ;
public static bool operator > ( nuint l , uint r ) ;
public static bool operator > ( nuint l , nuint r ) ;
public static bool operator > ( nuint l , UIntPtr r ) ;
public static bool operator <= ( nuint l , uint r ) ;
public static bool operator <= ( UIntPtr l , nuint r ) ;
public static bool operator <= ( nuint l , UIntPtr r ) ;
public static bool operator <= ( ulong l , nuint r ) ;
public static bool operator <= ( nuint l , ulong r ) ;
public static bool operator <= ( uint l , nuint r ) ;
public static bool operator <= ( nuint l , nuint r ) ;
public static bool operator >= ( nuint l , nuint r ) ;
public static bool operator >= ( nuint l , UIntPtr r ) ;
public static bool operator >= ( ulong l , nuint r ) ;
public static bool operator >= ( nuint l , ulong r ) ;
public static bool operator >= ( uint l , nuint r ) ;
public static bool operator >= ( nuint l , uint r ) ;
public static bool operator >= ( UIntPtr l , nuint r ) ;
public static implicit operator ulong ( nuint value ) ;
public static implicit operator UIntPtr ( nuint value ) ;
public static implicit operator nuint ( uint value ) ;
public static implicit operator nuint ( UIntPtr value ) ;
public static explicit operator nuint ( ulong value ) ;
public static explicit operator uint ( nuint value ) ;
}
IntPtr
/ UIntPtr
กับ nint
/ nuint
ขึ้นอยู่กับ:
นอกจากรองรับการแปลงโดยนัยสำหรับ:
IntPtr
ถึง/จาก nint
UIntPtr
ถึง/จาก nuint
รองรับ Conversion ต่อไปนี้เมื่อเปรียบเทียบกับ Conversion ที่มีสำหรับ IntPtr
/ UIntPtr
ชื่อ | จาก | IntPtr C# | UIntPtr C# | nint ซี# | nuint C# |
---|---|---|---|---|---|
op_โดยปริยาย | int | ไม่มี | ไม่มี | ใช่ | ไม่มี |
op_โดยปริยาย | uint | ไม่มี | ไม่มี | ไม่มี | ใช่ |
op_ชัดเจน | long | ไม่มี | ไม่มี | ใช่ | ไม่มี |
op_ชัดเจน | ulong | ไม่มี | ไม่มี | ไม่มี | ใช่ |
ชื่อ | ถึง | IntPtr C# | UIntPtr C# | nint ซี# | nuint C# |
---|---|---|---|---|---|
op_โดยปริยาย | long | ไม่มี | ไม่มี | ใช่ | ไม่มี |
op_โดยปริยาย | ulong | ไม่มี | ไม่มี | ไม่มี | ใช่ |
op_ชัดเจน | int | ไม่มี | ไม่มี | ใช่ | ไม่มี |
op_ชัดเจน | uint | ไม่มี | ไม่มี | ไม่มี | ใช่ |
ชื่อ | สัญลักษณ์ตัวดำเนินการ C++ | IntPtr C# | UIntPtr C# | nint ซี# | nuint C# |
---|---|---|---|---|---|
op_การลดลง | -- 1 | ไม่มี | ไม่มี | ใช่ | ใช่ |
op_การเพิ่มขึ้น | ++ 1 | ไม่มี | ไม่มี | ใช่ | ใช่ |
op_UnaryNegation | - (เอกนารี) | ไม่มี | ไม่มี | ใช่ | ใช่ |
op_UnaryPlus | + (เอกนารี) | ไม่มี | ไม่มี | ใช่ | ใช่ |
op_Logicalไม่ใช่ | - | ไม่มี | ไม่มี | ไม่มี | ไม่มี |
op_True | นด. 2 | ไม่มี | ไม่มี | ไม่มี | ไม่มี |
op_False | นด. 2 | ไม่มี | ไม่มี | ไม่มี | ไม่มี |
op_AddressOf | & (เอกนารี) | ไม่มี | ไม่มี | ไม่มี | ไม่มี |
op_Onesส่วนประกอบ | - | ไม่มี | ไม่มี | ใช่ | ใช่ |
op_PointerDereference | * (เอกนารี) | ไม่มี | ไม่มี | ไม่มี | ไม่มี |
1 จากมุมมองของ C++ อย่างแท้จริง วิธีที่เราจะต้องเขียนฟังก์ชันเหล่านี้สำหรับ CLI นั้นแตกต่างกันในแง่มุมที่สำคัญมากประการหนึ่ง ใน C++ วิธีการเหล่านี้จะต้องเพิ่มหรือลดตัวถูกดำเนินการโดยตรง ในขณะที่ใน CLI จะต้องไม่ทำเช่นนั้น แต่จะคืนค่าของตัวถูกดำเนินการ +/- 1 ตามความเหมาะสม โดยไม่ต้องแก้ไขตัวถูกดำเนินการ ตัวถูกดำเนินการจะต้องเพิ่มขึ้นหรือลดลงโดยคอมไพลเลอร์ที่สร้างโค้ดสำหรับตัวดำเนินการ ++/-- แยกจากการเรียกไปยังเมธอดเหล่านี้
2 ตัวดำเนินการ op_True และ op_False ไม่มีอยู่ใน C++ มีไว้เพื่อรองรับประเภทบูลีนแบบ tristate เช่นที่ใช้ในภาษาฐานข้อมูล
ตารางด้านล่างแสดงประเภทที่สามารถใช้ร่วมกับประเภทในส่วนหัวสำหรับตัวดำเนินการไบนารีที่กำหนด ตามค่าเริ่มต้น นี่เป็นสำหรับประเภททางด้านซ้ายหรือด้านขวาของนิพจน์ (ตัวดำเนินการไบนารี) อย่างไรก็ตาม ในบางกรณี ตัวดำเนินการอาจใช้ได้เฉพาะกับประเภทที่ด้านใดด้านหนึ่งของนิพจน์เท่านั้น โดย (R)
หมายถึง "ถูกต้องเท่านั้น"
ชื่อ | สัญลักษณ์ตัวดำเนินการ C++ | IntPtr C# | UIntPtr C# | nint ซี# | nuint C# |
---|---|---|---|---|---|
op_เพิ่มเติม | - | int (R) | int (R) | nint , IntPtr , int | nuint , UIntPtr , uint |
op_การลบ | - | int (R) | int (R) | nint , IntPtr , int | nuint , UIntPtr , uint |
op_ทวีคูณ | - | ไม่มี | ไม่มี | nint , IntPtr , int (R) | nuint , UIntPtr , uint (R) |
op_กอง | - | ไม่มี | ไม่มี | nint , IntPtr , int (R) | nuint , UIntPtr , uint (R) |
op_โมดูลัส | - | ไม่มี | ไม่มี | nint , IntPtr , int (R) | nuint , UIntPtr , uint (R) |
op_พิเศษหรือ | - | ไม่มี | ไม่มี | nint , IntPtr , int (R) | nuint , UIntPtr , uint (R) |
op_BitwiseAnd | - | ไม่มี | ไม่มี | nint , IntPtr , int (R) | nuint , UIntPtr , uint (R) |
op_BitwiseOr | - | ไม่มี | ไม่มี | nint , IntPtr , int (R) | nuint , UIntPtr , uint (R) |
op_LogicalAnd | - | ไม่มี | ไม่มี | ไม่มี | ไม่มี |
op_LogicalOr | - | ไม่มี | ไม่มี | ไม่มี | ไม่มี |
op_มอบหมาย | N/D (= ไม่เหมือนกัน) | ไม่มี | ไม่มี | ไม่มี | ไม่มี |
op_กะซ้าย | - | ไม่มี | ไม่มี | nint , IntPtr , int (R) | nuint , UIntPtr , uint (R) |
op_RightShift | - | ไม่มี | ไม่มี | nint , IntPtr , int (R) | nuint , UIntPtr , uint (R) |
op_SignedRightShift | ไม่ระบุ | ไม่มี | ไม่มี | ไม่มี | ไม่มี |
op_UnsignedRightShift | ไม่ระบุ | ไม่มี | ไม่มี | ไม่มี | ไม่มี |
op_ความเท่าเทียม | - | IntPtr | UIntPtr | nint , IntPtr , int , long | nuint , UIntPtr , uint , ulong |
op_ยิ่งใหญ่กว่า | - | IntPtr | UIntPtr | nint , IntPtr , int , long | nuint , UIntPtr , uint , ulong |
op_LessThan | - | IntPtr | UIntPtr | nint , IntPtr , int , long | nuint , UIntPtr , uint , ulong |
op_ความไม่เท่าเทียมกัน | - | IntPtr | UIntPtr | nint , IntPtr , int , long | nuint , UIntPtr , uint , ulong |
op_ยิ่งใหญ่กว่าหรือเท่ากับ | - | IntPtr | UIntPtr | nint , IntPtr , int , long | nuint , UIntPtr , uint , ulong |
op_LessThanOrEqual | - | IntPtr | UIntPtr | nint , IntPtr , int , long | nuint , UIntPtr , uint , ulong |
op_UnsignedRightShiftAssignment | ไม่ได้กำหนดไว้ | ไม่มี | ไม่มี | ไม่มี | ไม่มี |
op_การเลือกสมาชิก | - | ไม่มี (N/OC#) | ไม่มี (N/OC#) | ไม่มี (N/OC#) | ไม่มี (N/OC#) |
op_การมอบหมาย Shift ขวา | - | ไม่มี (N/OC#) | ไม่มี (N/OC#) | nint , IntPtr , int | nuint , UIntPtr , uint TODO |
op_การคูณการมอบหมาย | - | ไม่มี (N/OC#) | ไม่มี (N/OC#) | nint , IntPtr , int | nuint , UIntPtr , uint TODO |
op_PointerToMemberSelection | - | ไม่มี (N/OC#) | ไม่มี (N/OC#) | ไม่มี (N/OC#) | ไม่มี (N/OC#) |
op_การลบการกำหนด | - | int | int | nint , IntPtr , int | nuint , UIntPtr , uint TODO |
op_พิเศษหรือมอบหมาย | - | ไม่มี (N/OC#) | ไม่มี (N/OC#) | nint , IntPtr , int | nuint , UIntPtr , uint TODO |
op_การมอบหมาย Shift ซ้าย | - | ไม่มี (N/OC#) | ไม่มี (N/OC#) | nint , IntPtr , int | nuint , UIntPtr , uint TODO |
op_Modulusการมอบหมาย | - | ไม่มี (N/OC#) | ไม่มี (N/OC#) | nint , IntPtr , int | nuint , UIntPtr , uint TODO |
op_การมอบหมายเพิ่มเติม | - | int | int | nint , IntPtr , int | nuint , UIntPtr , uint TODO |
op_BitwiseAndAssignment | - | ไม่มี (N/OC#) | ไม่มี (N/OC#) | nint , IntPtr , int | nuint , UIntPtr , uint TODO |
op_BitwiseOrการมอบหมาย | - | ไม่มี (N/OC#) | ไม่มี (N/OC#) | nint , IntPtr , int | nuint , UIntPtr , uint TODO |
op_จุลภาค | - | ไม่มี (N/OC#) | ไม่มี (N/OC#) | ไม่มี (N/OC#) | ไม่มี (N/OC#) |
op_การมอบหมายแผนก | - | ไม่มี (N/OC#) | ไม่มี (N/OC#) | nint , IntPtr , int | nuint , UIntPtr , uint TODO |
N/A
= ไม่สามารถใช้ได้N/O
= ไม่โอเวอร์โหลด แต่สำหรับตัวดำเนินการที่ได้รับมอบหมายซึ่งสามารถใช้งานได้ผ่านตัวดำเนินการคงที่แบบไบนารี เช่น +=
สามารถใช้ได้ผ่านทาง +
วิธีการต่อไปนี้จะเหมือนกันหรือส่งต่อไปยังการใช้งาน IntPtr
/ UIntPtr
ที่เทียบเท่ากัน
public override bool Equals ( object obj )
public override int GetHashCode ( )
public override string ToString ( )
มีการใช้อินเทอร์เฟซต่อไปนี้สำหรับประเภทที่กำหนด nint
หรือ nuint
:
IEquatable < T >
IComparable < T >