class Person { public object Id { get;} public string Name { get;} public Person(object id, string name) { Id = id; Name = name; } } Keyinchalik bu sinf dasturda foydalanuvchilarni yaratish uchun ishlatilishi mumkin: Person tom = new Person(546, "Tom"); Person bob = new Person("abc123", "Bob"); int tomId = (int)tom.Id; string bobId = (string) bob.Id; Console.WriteLine(tomId); // 546 Console.WriteLine(bobId); // abc123 Har bir narsa ajoyib ishlayotganga o'xshaydi, lekin bu yechim juda maqbul emas. Gap shundaki, bu holda biz jamlash (boxing) va yoyish (unboxing) kabi hodisalarga duch kelamiz. Shunday qilib, int tipidagi qiymat konstruktorga o'tkazilganda, bu qiymat Object turiga to'planadi: Person tom = new Person(546, "Tom"); Ma'lumotni int turdagi o'zgaruvchiga qaytarish uchun siz quyidagilarni ochishingiz kerak: Jamlash(boxing) qiymat turidagi ob'ektni (masalan, int) object turiga aylantirishni o'z ichiga oladi. Qadoqlashda umumiy tilning ish vaqti (CLR) qiymatni System.Object tipidagi ob'ektga jamlab oladi va uni boshqariladigan heapda saqlaydi. Boshqa tomondan, yoyish (unboxing) object tipidagi ob'ektni qiymat turiga aylantirishni o'z ichiga oladi. Jamlash va yoyish unumdorlikni pasaytiradi, chunki tizim kerakli o'zgarishlarni amalga oshirishi kerak. Bundan tashqari, yana bir muammo bor - turdagi xavfsizlik muammosi. Shunday qilib, agar biz shunday yozsak, ish vaqti xatosiga duch kelamiz: Person tom = new Person(546, "Tom");
Do'stlaringiz bilan baham: |