PDA

View Full Version : اموزش پیاده سازی لیست جنریک



aminkk
جمعه 01 خرداد 1388, 13:41 عصر
سلام
بچه ها من یه خورده تو جنریک ها مشکل دارم.
می دونم که زمانی که ما لیستی از مقادیر رو بخوایم که به صورت ارایه ای باشن که همه نوع data-type رو شامل بشه و محدود باشه ازش استفاده میشه.اما نمی دونم دقیق لزوم این کار چیه و مشکل arraylist چیه؟
اصلاً کجا کاربرد داره و اگر میشه پیاده سازیش رو اموزش بدین.

adinochestva
جمعه 01 خرداد 1388, 14:44 عصر
http://www.dotnetspider.com/resources/20675-Difference-between-Arraylist-Generic-List.aspx
http://www.daniweb.com/forums/thread80221.html

Mahdi.Kiani
جمعه 01 خرداد 1388, 14:59 عصر
اگر به نوع داده ورودی ArrayList ها، دقت کنید، خواهید دید که مقداری از نوع object دریافت می کند. در نتیجه شما می توانید، مقادیری از نوع int، string و .. را به لیستتان وارد کنید. در نگاه اول این موضوع می تواند مزیت قایل توجهی را در مورد این کلاس تداعی کند. چرا که می توانید مقادیری از هر نوع داده ای را به آن اضافه کنید.اما اگر عمیق تر به موضوع نگاه کنید، متوجه معایب مهم آن خواهید شد.
اولین عیب، وجود عملیات Boxing و UnBoxing در این کلاس می باشد که تاثیر منفی بر روی کارایی برنامه خواهد داشت.
دومین ایراد آن این است که در زمان کمپایل نوع داده شما مشخص نیست.
در واقع Array List ها Strongly Typed نمی باشند./
به عنوان مثال فرض کنید دستورات زیر را داشته باشید:





System.Collections.ArrayList al = new System.Collections.ArrayList();
al.Add("ali");
al.Add(2);
int val = (int)al[0];



این کد بدون هیچ خطای زمان کمپایل اجرا خواهد شد. اما حین اجرا به خطا بر خورد خواهید کرد (run time error)
متن خطا



Specified cast is not valid.

دلیل خطا به وضوح مشخص است./

در مقابل، Generic List ها ، با مشحص کردن نوع ارگومان های ورودی از بروز این خطاها و معایب جلوگیری می کنند.
به عنوان مثال شما نمی توانید در لیست زیر مقداری از نوع string وارد کنید.



List<int> integerList = new List<int>();

در واقع کد زیر




integerList.Add("ali");

خطای زمان کمپایل زیر را خواهد داد:



The best overloaded method match for 'System.Collections.Generic.List<int>.Add(int)' has some invalid arguments

اطلاعات بیشتر در مورد generic ها (http://msdn.microsoft.com/en-us/library/512aeb7t.aspx)

yekta64
پنج شنبه 02 مهر 1388, 08:02 صبح
سلام
ممنون از توضیحات مفیدتون
یه سوال آيا میشه این جنریک لیست رو برای تعدادی label هم تعریف کرد

اَرژنگ
پنج شنبه 02 مهر 1388, 09:32 صبح
سلام
ممنون از توضیحات مفیدتون
یه سوال آيا میشه این جنریک لیست رو برای تعدادی label هم تعریف کرد
از امتحان کردن نترسید!

Vahid_moghaddam
پنج شنبه 02 مهر 1388, 13:13 عصر
List<Label> LableList = new List<Label>();
LableList.Add(new Label() { Name = "L1", Text = "Label1" });