من المحتمل أن تكون الأعداد الصحيحة الأصلية 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
يتم دعم التحويلات التالية مقارنة بالتحويلات المتاحة لـ IntPtr
/ UIntPtr
.
اسم | من | IntPtr سي # | UIntPtr C # | nint سي # | nuint سي # |
---|---|---|---|---|---|
op_Implicit | int | لا يوجد | لا يوجد | نعم | لا يوجد |
op_Implicit | uint | لا يوجد | لا يوجد | لا يوجد | نعم |
op_Explicit | long | لا يوجد | لا يوجد | نعم | لا يوجد |
op_Explicit | ulong | لا يوجد | لا يوجد | لا يوجد | نعم |
اسم | ل | IntPtr سي # | UIntPtr C # | nint سي # | nuint سي # |
---|---|---|---|---|---|
op_Implicit | long | لا يوجد | لا يوجد | نعم | لا يوجد |
op_Implicit | ulong | لا يوجد | لا يوجد | لا يوجد | نعم |
op_Explicit | int | لا يوجد | لا يوجد | نعم | لا يوجد |
op_Explicit | uint | لا يوجد | لا يوجد | لا يوجد | نعم |
اسم | رمز عامل التشغيل C++ | IntPtr سي # | UIntPtr C # | nint سي# | nuint سي # |
---|---|---|---|---|---|
op_Decrement | -- 1 | لا يوجد | لا يوجد | نعم | نعم |
op_Increment | ++ 1 | لا يوجد | لا يوجد | نعم | نعم |
op_UnaryNegation | - (أحادي) | لا يوجد | لا يوجد | نعم | نعم |
op_UnaryPlus | + (أحادي) | لا يوجد | لا يوجد | نعم | نعم |
op_LogicalNot | ! | لا يوجد | لا يوجد | لا يوجد | لا يوجد |
op_True | ن.د 2 | لا يوجد | لا يوجد | لا يوجد | لا يوجد |
op_False | ن.د 2 | لا يوجد | لا يوجد | لا يوجد | لا يوجد |
op_AddressOf | & (أحادي) | لا يوجد | لا يوجد | لا يوجد | لا يوجد |
op_OnesComplement | ~ | لا يوجد | لا يوجد | نعم | نعم |
op_PointerDereference | * (أحادي) | لا يوجد | لا يوجد | لا يوجد | لا يوجد |
1 من وجهة نظر لغة C++ البحتة، تختلف الطريقة التي يجب أن يكتب بها المرء هذه الوظائف لواجهة سطر الأوامر (CLI) في جانب واحد مهم جدًا. في لغة C++، يجب على هذه الأساليب زيادة أو تقليل معاملاتها مباشرة، بينما في سطر الأوامر، لا يجب عليها ذلك؛ بدلاً من ذلك، يقومون ببساطة بإرجاع قيمة المعامل الخاص بهم +/- 1، حسب الاقتضاء، دون تعديل المعامل الخاص بهم. يجب زيادة المعامل أو إنقاصه بواسطة المترجم الذي يقوم بإنشاء التعليمات البرمجية لعامل التشغيل ++/--، بشكل منفصل عن استدعاء هذه الأساليب.
2 لا يوجد عاملي op_True وop_False في لغة C++. يتم توفيرها لدعم الأنواع المنطقية ثلاثية الحالة، مثل تلك المستخدمة في لغات قواعد البيانات.
يوضح الجدول أدناه الأنواع التي يمكن استخدامها مع النوع الموجود في الرأس لمشغل ثنائي محدد. افتراضيًا، يكون هذا مخصصًا للنوع الموجود على الجانب الأيسر أو الأيمن من التعبير (المشغل الثنائي). ومع ذلك، في بعض الحالات، قد يكون عامل التشغيل متاحًا فقط لنوع ما في جانب معين من التعبير، حيث تعني (R)
"الصحيح فقط".
اسم | رمز عامل التشغيل C++ | IntPtr سي # | UIntPtr C # | nint سي# | nuint سي # |
---|---|---|---|---|---|
op_Addition | + | int (R) | int (R) | nint , IntPtr , int | nuint UIntPtr uint |
op_Subtraction | - | int (R) | int (R) | nint , IntPtr , int | nuint UIntPtr uint |
op_Multiply | * | لا يوجد | لا يوجد | nint ، IntPtr ، int (R) | nuint ، UIntPtr ، uint (R) |
op_Division | / | لا يوجد | لا يوجد | nint ، IntPtr ، int (R) | nuint ، UIntPtr ، uint (R) |
op_Modulus | % | لا يوجد | لا يوجد | nint ، IntPtr ، int (R) | nuint ، UIntPtr ، uint (R) |
op_ExclusiveOr | ^ | لا يوجد | لا يوجد | 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_Assign | N/D (= ليس هو نفسه) | لا يوجد | لا يوجد | لا يوجد | لا يوجد |
op_LeftShift | << | لا يوجد | لا يوجد | nint ، IntPtr ، int (R) | nuint ، UIntPtr ، uint (R) |
op_RightShift | >> | لا يوجد | لا يوجد | nint ، IntPtr ، int (R) | nuint ، UIntPtr ، uint (R) |
op_SignedRightShift | اختصار الثاني | لا يوجد | لا يوجد | لا يوجد | لا يوجد |
op_UnsignedRightShift | اختصار الثاني | لا يوجد | لا يوجد | لا يوجد | لا يوجد |
op_Equality | == | IntPtr | UIntPtr | nint IntPtr int long | nuint UIntPtr uint ulong |
op_GreatThan | > | IntPtr | UIntPtr | nint IntPtr int long | nuint UIntPtr uint ulong |
op_LessThan | < | IntPtr | UIntPtr | nint IntPtr int long | nuint UIntPtr uint ulong |
op_Inequality | != | IntPtr | UIntPtr | nint IntPtr int long | nuint UIntPtr uint ulong |
op_GreaterThanOrEqual | >= | 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_MemberSelection | -> | غير متاح (N/OC#) | غير متاح (N/OC#) | غير متاح (N/OC#) | غير متاح (N/OC#) |
op_RightShiftAssignment | >>= | غير متاح (N/OC#) | غير متاح (N/OC#) | nint , IntPtr , int | nuint ، UIntPtr ، uint TODO |
op_MultiplicationAssignment | *= | غير متاح (N/OC#) | غير متاح (N/OC#) | nint , IntPtr , int | nuint ، UIntPtr ، uint TODO |
op_PointerToMemberSelection | ->* | غير متاح (N/OC#) | غير متاح (N/OC#) | غير متاح (N/OC#) | غير متاح (N/OC#) |
op_SubtractionAssignment | -= | int | int | nint , IntPtr , int | nuint ، UIntPtr ، uint TODO |
op_ExclusiveOrAssignment | ^= | غير متاح (N/OC#) | غير متاح (N/OC#) | nint , IntPtr , int | nuint ، UIntPtr ، uint TODO |
op_LeftShiftAssignment | <<= | غير متاح (N/OC#) | غير متاح (N/OC#) | nint , IntPtr , int | nuint ، UIntPtr ، uint TODO |
op_ModulusAssignment | %= | غير متاح (N/OC#) | غير متاح (N/OC#) | nint , IntPtr , int | nuint ، UIntPtr ، uint TODO |
op_AdditionAssignment | += | int | int | nint , IntPtr , int | nuint ، UIntPtr ، uint TODO |
op_BitwiseAndAssignment | &= | غير متاح (N/OC#) | غير متاح (N/OC#) | nint , IntPtr , int | nuint ، UIntPtr ، uint TODO |
op_BitwiseOrAssignment | |= | غير متاح (N/OC#) | غير متاح (N/OC#) | nint , IntPtr , int | nuint ، UIntPtr ، uint TODO |
op_Comma | , | غير متاح (N/OC#) | غير متاح (N/OC#) | غير متاح (N/OC#) | غير متاح (N/OC#) |
op_DivisionAssignment | /= | غير متاح (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 >