Boxing and Unboxing in C#

Boxing and Unboxing in C#: Boxing एक ऐसी प्रक्रिया है, जिसमें CLR किसी Value Type जैसे कि int, float, double, long आदि को Appropriate System.Object Type में Convert करता है। उदाहरण के लिए यदि int Type के मान को System.Int32 Type के मान में Convert करें, तो इस प्रक्रिया को Boxing कहा जाता है। जबकि ठीक इसके विपरीत यदि हम System.Int32 Type के मान को int Type के मान में Convert करें, तो इसी प्रक्रिया को Unboxing कहा जाता है।

जैसाकि हमने इस पुस्तक में पहले भी बताया है कि C# के सभी Types यहां तक कि सभी Value Types भी object Type से Derived Types हैं। हालांकि सभी Value Types अपने आप में Efficient तरीके से काम करते हैं, इसलिए सामान्‍यत: Memory के Heap Area में नहीं बल्कि Normal Primitive Data Type की तरह ही Stack Area में ही Space Reserve करते हैं।

लेकिन कभी-कभी ऐसी जरूरत पड जाती है, जब हमें Primitive Types के मानों को Object की तरह Treat करना होता है। उस स्थिति में हमें ऐसे Primitive मानों को उनसे Associated Class Type में Convert करना जरूरी होता है।

इस Conversion को Boxing के नाम से जाना जाता है, जो कि एक Implicit Conversion Process होता है। इस Conversion Process के अन्तर्गत एक Value Type मान को Object Type मान में Convert करके उसका Reference Return कर दिया जाता है।

        int valueType = 100;
object objType = null;
objType = valueType;            //Boxing : ValueType  to ObjectType Implicit Conversion

जब ये Statements Run होते हैं, तो सबसे पहले Integer Type का valueType नाम का एक Variable Create होता है और object Type का objType नाम का एक Variable Create होता है। valueType Variable में मान 100 Initialize किया जाता है, जबकि objType में null Store किया जाता है।

फिर तीसरे Statement में जब हम objType में valueType मान को Assign करते हैं, तो CLR Automatically valueType Primitive मान को एक object Type Reference में Convert करके objType में Store कर देता है। Value Type से Object Type में Convert होने की इसी प्रक्रिया को Boxing नाम से जाना जाता है।

जब Boxing Perform होता है तब Value Type Identifier, Object Type में Convert नहीं होताए बल्कि एक नया Object Type Create होता है, जिसमें Value के रूप में Value Type Identifier का मान Store होता है।

इसलिए यदि हम Boxing करने के बाद Value Type Variable के मान को Change कर दें] तो Reference Type Object के मान में किसी तरह का परिवर्तन नहीं होताए क्योंकि Reference Type Object में Stored Data, Value Type Variable के Data से अलग होता है।

जब Boxing Conversion Perform होता है, तो ValueType किसी object, System.ValueType या Interface Type में Convert हो सकता है, जिसे हम निम्न चित्रानुसार Represent कर सकते हैं:

Boxing and Unboxing in C# - Hindi

हालांकि Boxing Conversion एक Implicit Process होता है, लेकिन Unboxing Conversion हमेंशा एक Explicit Conversion होता है, जिसके अन्तर्गत हम किसी Reference Type मान को Value Type मान में Convert करते हैं।

जब हम किसी ValueType मान को Unboxing करना चाहते हैं, तब Compiler सबसे पहले इस बात को Check करता है कि Unboxed होने वाले Object का Data, Value Type है या नहीं। यदि Data Value Type होता है, तो Compiler उस Data को ValueType Variable में Copy कर देता है। जैसे:

int valueType = 100;
object objType = i;                              //Boxing : ValueType  to ObjectType Implicit Conversion
int otherValType = int(objType);    //Unboxing: ObjectType to ValueType  Explicit Conversion

इस Code Segment में जब हम objType Object को valueType Variable का मान Assign करते हैं, तो Boxing Perform होती है। लेकिन Unboxing तब Perform होती है, जब हम किसी Object Type को किसी Value Type में Manually Convert करते हैं, जैसाकि इस Code Segment के तीसरे Line के Code में किया गया है।

Nullable Types in C#
OOPS Concepts in C# with Examples

C# in Hindiये Article इस वेबसाईट पर Selling हेतु उपलब्‍ध EBook C#.NET in Hindi से लिया गया है। इसलिए यदि ये Article आपके लिए उपयोगी रहा, तो निश्चित रूप से ये पुस्तक भी आपके लिए काफी उपयोगी साबित होगी। 

C#.NET in Hindi | Page:908 | Format: PDF

BUY NOW GET DEMO REVIEWS