Tuesday 15 July 2014

C# boxing va unboxing converting.
C# dasturlash tili qatiy tiplangan dasturlash tillari gurihiga kiradi. C++, Java DTlaridagi kabi C#da ham tiplar 2ta asosiy guruhga bo’linadi:DTda aniqlangan tiplar va foydalanuvchi tomonidan yaratilgan tiplar. Ob’ekt tipi kompilyatorga ob’ekt o’lchamini bildiradi.
Tiplar sistemasi 3 guruhga bo’linadi:
1)      Value Types – O’zgaruvchining joriy qiymatini saqlaydi. Stekda joylashadi va ishlash tezligi yuqori bo’ladi (int, sbyte, short, ushort, uint, long, char, float, double, decimal, bool, enum, struct)
2)      Reference Types – o’zgaruvchi qiymatining adressini saqlaydi. Kucha(heap)da joylashadi (string, object, class, interface, delegate, barcha massivlar (hatto ularning qiymatlari Value Type bo’lsa ham))
3)      Pointer Types (Masalan int* p, float* k, enum* q,…)
*Izoh: Stek -  har bir yangi qo’shilgan elemet avvalgilardan yuqorida joylashish ya’ni “Birinchi kelgan oxirida ketadi” prinsipida ishlovchi konteyner(See also: http://professorweb.ru/my/csharp/charp_theory/level12/12_6.php).

C# da Value tipni Referance tipga, yoki aksincha Referance tipni Value tipga konvertlash (o’girish) mumkin. Value tipni Reference tipga konvertlash operatsiyasi Boxing konvertlash, teskari operatsiya esa Unboxing konvertlash deyiladi.
Masalan
Boxing:
1: int Val1=1;
2: Object Val2=Val1;//Boxing
UnBoxing:
1: int Val1=123;
2: Object Val2=Val1;//Boxing
3: int Val3=(int)Obj;//Unboxing
Izoh: birinchi ikki qatorda Value tipni Reference tipga o’girish ko’rsatilgan, keyingi qatorda esa Objectdan qanday qilib Value tipga o’girish mumkinligi ko’rsatilgan. Bu jarayon Reference tipdan Value tipga o’g’rirish(Unboxing Converting) deb nomlanadi.
See also

http://msdn.microsoft.com/en-us/library/yz2be5wk.aspx