मैं उन सभी स्थितियों को इकट्ठा करने की कोशिश कर रहा हूं जिनमें C # में मुक्केबाजी होती है:
टाइप करने के लिए मान परिवर्तित करना
System.Object
:struct S { } object box = new S();
टाइप करने के लिए मान परिवर्तित करना
System.ValueType
:struct S { } System.ValueType box = new S();
टाइप करने के लिए एन्यूमरेशन प्रकार का मान परिवर्तित करना
System.Enum
:enum E { A } System.Enum box = E.A;
इंटरफ़ेस संदर्भ में मान प्रकार परिवर्तित करना:
interface I { } struct S : I { } I box = new S();
C # स्ट्रिंग संघनन में मूल्य प्रकारों का उपयोग करना:
char c = F(); string s1 = "char value will box" + c;
नोट:
char
प्रकार के स्थिरांक का संकलन समय पर किया जाता हैध्यान दें: संस्करण 6.0 सी # संकलक के बाद से अनुकूलन संयोजन शामिल
bool
,char
,IntPtr
,UIntPtr
प्रकारमान प्रकार आवृत्ति विधि से प्रतिनिधि बनाना:
struct S { public void M() {} } Action box = new S().M;
मूल्य प्रकारों पर गैर-ओवरराइड वर्चुअल तरीकों को कॉल करना:
enum E { A } E.A.GetHashCode();
के तहत C # 7.0 निरंतर पैटर्न का उपयोग करना
is
अभिव्यक्ति के :int x = …; if (x is 42) { … } // boxes both 'x' and '42'!
सी # टपल प्रकार रूपांतरण में बॉक्सिंग:
(int, byte) _tuple; public (object, object) M() { return _tuple; // 2x boxing }
object
मूल्य प्रकार के डिफ़ॉल्ट मानों के साथ वैकल्पिक पैरामीटर :void M([Optional, DefaultParameterValue(42)] object o); M(); // boxing at call-site
के लिए असंबंधित सामान्य प्रकार के मूल्य की जाँच करना
null
:bool M<T>(T t) => t != null; string M<T>(T t) => t?.ToString(); // ?. checks for null M(42);
नोट: इसे JIT द्वारा कुछ .NET रनटाइम्स में ऑप्टिमाइज़ किया जा सकता है
/ संचालकों के
struct
साथ असंबद्ध या सामान्य प्रकार का परीक्षण मूल्य टाइप करें :is
as
bool M<T>(T t) => t is int; int? M<T>(T t) => t as int?; IEquatable<T> M<T>(T t) => t as IEquatable<T>; M(42);
नोट: इसे JIT द्वारा कुछ .NET रनटाइम्स में ऑप्टिमाइज़ किया जा सकता है
क्या मुक्केबाजी की कोई और स्थितियां हैं, शायद छिपी हुई हैं, जिसे आप जानते हैं?