نمایش نتایج 1 تا 7 از 7

نام تاپیک: تعریف آرایه پویا

  1. #1

    تعریف آرایه پویا

    سلام
    می تونید بگید که چطوری می تونم آرایه ای تعریف کنم که با هر بار کلیک من یک دونه به عناصر اون اضافه بشه (یعنی هیچ وقت پر نشه).

    ممنونم


    استخدام برنامه نویس دات نت (Asp.net,C#‎‎‎‎,jquery,...)
    ترجیحا خراسان شمالی ، بجنورد
    به صورت پاره وقت و تمام وقت

    ارسال اطلاعات و رزومه کاری به Job@tosa.ir

  2. #2
    با سلام
    ما راههای زیادی برای تعریف آرایه به خصوص پویا در .NET داریم یکیش به شکل زیر است :

    List<string> a = new List<string>();


    string یی که در چیزی شبیه به Tag نوشته شده نوع خونه های آرایه را مشخص میکنه بعد با تابع Add میتوانید به آن اضافه نمایید.

    a.Add("1");

    ونیز با Remove می توانید آن را از آرایه حذف نمایید.

    همچنین برای اطلاعات بیشتر در مورد اون Tag ماننده(Generic Type) می توانید به لینک زیر مراجعه نمایید :
    http://www.developercenter.ir/Forum/...ead.php?t=7415

  3. #3
    کاربر دائمی آواتار mohammad272005
    تاریخ عضویت
    مرداد 1386
    محل زندگی
    تهران
    پست
    639
    به تعداد انسانها راه است برای اینکار. راحتترینش ArrayList هست.
     
    ArrayList a = new ArrayList();
    a.Add(1);
    a.Add("Hello");
    string b = a[1];
    // ...

  4. #4
    نقل قول نوشته شده توسط mohammad272005 مشاهده تاپیک
    به تعداد انسانها راه است برای اینکار. راحتترینش ArrayList هست.
     
    ArrayList a = new ArrayList();
    a.Add(1);
    a.Add("Hello");
    string b = a[1];
    // ...
    استفاده از ArrayList به هیچ عنوان توصیع نمیشه به این دلیل که Type Safe نیست
    چون از boxing وunBoxing استفاده میکنه
    Boxing یعنی اینکه یک شی valu type را به یک شی reference type تبدیل کنیم
    مثل مثال زیر


    int a = 10;
    object O = a;


    همونطور که میبینید متغیر یا فیلد a که از نوع Int هست و value Type به حساب میاد در دستور دوم تبدیل به O یک یک شی reference type شده میباشد
    به عمل فوق box کردن میگویند
    و اما unBoxing چیه ؟
    دقیقا عکس عمل فوق را unboxing میگویند
    مثل مثال زیر


    object O = 10;
    int a = (int)O;

    همونطور که دیدن برای unbox کردن نیاز یه تبدیل cast داریم
    خوب اشکال این کجاست ؟
    به قطعه کد زیر دقت کنید


    void increment(object a)
    {

    int num1 = (int)a;
    MessageBox.Show("incrementt is " + ++num1);

    }



    ورودی تابع فوق یک object هست پس میتوانیم فراخوانی های زیر را داشته باشیم بدون اینکه خطایی از جانب کامپایلر دریافت کنیم (در زمان کد نویسی منظورم هست)


    increment(10); //no Error



    increment("mahdi"); //RunTime Error

    اما با اجرای دستورات فوق میبینید که خط دوم برنامه را دچار اخلال نیکنه
    Array list ها هم دقیقا شبیه همین مطالبی که گفتم عمل میکنند
    موقع اضافه کردن به array list عمل boxing و موقع خواندن عمل unboxing به وجود میاید

    حال فرض کنید که همونطور که دوستمون mohammad272005 در کدشون نوشتن یه arryay list تعریف کردند
    حالا به جای آخرین خط کد ایشون این کد را بذارید


    int b =(int) a[1];



    کد فوق از جانب کامپایلر هیچ ایرادی نداره و (خطای Syntax) به راحتی برنامه اجرا میشه اما در زمان اجرا طبیعتا برنامه منفجر خواهد شد چون مقدار a[1]="hello" میباشد و ماخواستیم این مقدار را به int تبدیل کنیم

    چاره کار چیست ؟
    چاره کار استفاده از generic ها هستند که دوستمون BeyondMicrosoft هم اشاره کوچیکی کردند و من کاملتر توضیح میدم

    در واقع شما میتوانید به دو صورت از generic ها استفاده کنید مثل بقیه ابزار ها یا اینکه از ابزارهای موجود در دات نت استفاده کنید که تقریبا 90 نیاز ها را پاسخ گو هست و یا اینکه خودتون اقدام به نوشتن کلاس های generic کنید و از اونا استفاده کنید

    من مورد اول یعنی استفاده از کلاس های generic موجود در دات نت را توضیح میدم اگه کسی مشتاق بود تا نوشتن کلاس های generic و استفاده از ان ها را هم توضیح بدم

    کلاس های generic موجود در دات نت در namespace زیر قرار دارند


    ُSystem.Collections.Generic



    نحوه تمایز کلاس ها ی generic از بقیه کلاس ها اینه که به دنبال اسم کلاس مربوطه علامت <> را هم میبینید

    موقعی که میخواین از یک کلاس یک آبجکت بگیرین به صورت زیر عمل میکردین



    ClassName ObjectName =new ClassName ();


    طریقه آبجکت گیری از کلاس ها ی generic هم دقیقا مانند فوق است با یک تغییر کوچولو




    GenericClassName<Type> objectName =new GenericClassName<Type>();


    که به جای type باید نوع دلخواه خودوتن را بذارید مثلا int یا String و ......



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

    list<string> stringList =new list<string>();

    در واقع با دستور فوق شما یک list که اعضای آن از نوع int , دیگری از نوع string هستند تولید خواهید کرد
    حال از اینجا به بعد میتونید با توابع زیاد و کاربردی که در دستتون خواهد بود کارکنید مثلا



    intList.dd(5);

    stringList.Add("mahdi kiani");


    , .....
    اما همه این ها را گفتم که عیبی را که Arraylist ها داشتند را از بین ببریم
    در واقع وقتی شما به جای ArrayList از generic ها استفاده میکنین جلوی عمل boxing و unboxing را میگیرین بدن صورت که
    همونطور که دیدن به متد Add از کلاس ArrayList شما میتونید هم مقادیر string هم int و ..... را پاس بدین که همگی تبدیل به شی از نوع آبجکت میشدند
    اما وقتی شما از یک genericList استفاده میکنید ورودی تابع Add شما مقداری خواهد بود که الزاما نوعش باید با نوعی که هنگام تعریف genericlist تعریف کردین باشه
    یعنی شما نمیتوانید بنویسید

    intList.Add("MK");



    با نوشتن دستور فوق کامپایلر به شما خطا یی را گزارش خواهد کرد

    پس دیگه عمل boxing را نخواهید داشت
    همچنین موقع خواند داده های وارد شده هم عمل unbpxing را نخواهید داشت

    به عنوان مثال به کدهای زیرتوجه کنید
    کامپایلر به خط 3 ایراد خواهد گرفت


    System.Collections.Generic.List<int> intList =new List<int>();
    intList.Add(2);
    string s = (string)intList[0];





    امید وارم مفید بوده باشه

    پا ورقی :
    تمامی مطالب گفته شده در MSDN هم وجود دارد ولی من برای اون دسته از عزیزانی که وقت ترجمه کردن نداریند و یا در اینگلیسی خوندن و ترجمه کردن مشکل دارن یا اونایی که خوندن ولی در فهم اون مشکل داشتند گفتم

  5. #5
    کاربر دائمی
    تاریخ عضویت
    اسفند 1385
    محل زندگی
    تهران
    پست
    1,486
    خیلی ممنون از توضیحاتت دوست عزیز
    یه سوال برام پیش اومد که آیا وقتی Arraylist رو وقتی که فقط یه نوع داده (مثلا int ) در اون قرار میدیم آیا باز هم استفادش توصیه نمیشه؟
    ضمنا اگه لطف کنین در مورد نوشتن کلاس های generic هم توضیح بدین ممنون میشم

  6. #6

  7. #7
    نقل قول نوشته شده توسط emad_67 مشاهده تاپیک
    خیلی ممنون از توضیحاتت دوست عزیز
    یه سوال برام پیش اومد که آیا وقتی Arraylist رو وقتی که فقط یه نوع داده (مثلا int ) در اون قرار میدیم آیا باز هم استفادش توصیه نمیشه؟
    ضمنا اگه لطف کنین در مورد نوشتن کلاس های generic هم توضیح بدین ممنون میشم
    نقل قول نوشته شده توسط emad_67 مشاهده تاپیک
    خیلی ممنون از توضیحاتت دوست عزیز
    سلام خواهش میکنم
    قابلی نداشت

    نقل قول نوشته شده توسط emad_67 مشاهده تاپیک
    یه سوال برام پیش اومد که آیا وقتی Arraylist رو وقتی که فقط یه نوع داده (مثلا int ) در اون قرار میدیم آیا باز هم استفادش توصیه نمیشه؟
    جواب کامل در پست قبلی داده شده
    ولی در یک کلمه نه درست نیست این نظر من هست(البته بستگی به دید افراد و روش برنامه نویسی داره)
    همیشه به شاگردام توصیه میکنم که برنامه نویس بشن نه کد نویس !!!

    QUOTE=emad_67;394930]
    ضمنا اگه لطف کنین در مورد نوشتن کلاس های generic هم توضیح بدین ممنون میشم
    [/QUOTE]
    چشم
    حتما
    فقط یکم سرم شلوغه ولی سعی میکنم که زود تایپ کنم و بفرستم

    موفق باشید
    کیانی

قوانین ایجاد تاپیک در تالار

  • شما نمی توانید تاپیک جدید ایجاد کنید
  • شما نمی توانید به تاپیک ها پاسخ دهید
  • شما نمی توانید ضمیمه ارسال کنید
  • شما نمی توانید پاسخ هایتان را ویرایش کنید
  •