تبلیغات :
ماهان سرور
آکوستیک ، فوم شانه تخم مرغی ، پنل صداگیر ، یونولیت
دستگاه جوجه کشی حرفه ای
فروش آنلاین لباس کودک
خرید فالوور ایرانی
خرید فالوور اینستاگرام
خرید ممبر تلگرام

[ + افزودن آگهی متنی جدید ]




نمايش نتايج 1 به 6 از 6

نام تاپيک: استفاده از یک کلاس بدون گرفتن حافظه

  1. #1
    آخر فروم باز
    تاريخ عضويت
    Nov 2009
    پست ها
    1,257

    پيش فرض استفاده از یک کلاس بدون گرفتن حافظه

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

    کد:
    برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید

    کد بالا ما داخل Customer یک متغیر از نوع کلاس Car تعریف کردیم که هنگام استفاده فقط وقتی از کلاس Customer شی تعریف کنیم کافی هست و به راحتی بدون new کردم از Car میشه ازش استفاده کرد و مقدار دهی کرد کلاس car رو.
    کد:
    برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
    و سوال بعدی اینکه متغیر از نوع کلاس
    Car رو به صورت Property تعریف کرده- اگر Property نمیزاشت چه فرقی میکرد؟
    بعد چطور میشه به طور مستقیم از set استفاده کرد؟ یا get ? کدام از متغیر ها رو برمیگردونه یا ست میکنه؟ تست کردم ارور میداد.

  2. #2
    اگه نباشه جاش خالی می مونه L͠øneWolf's Avatar
    تاريخ عضويت
    Feb 2014
    محل سكونت
    ۴۱ تریلیون کیلومتری آلفا قنطورس
    پست ها
    294

    پيش فرض

    car یه Property هست. Property ها متغیر نیستن، بلکه یه پک از دو تا تابع (Setter and Getter) هستن.
    به خاطر همین معمولا جاهایی که Property تعریف می شه یه متغیر (Field) هم کنارش تعریف می شه.


    مثل


    کد:
    برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید

    یه نوع خاص از Property رو داریم به اسم Automatic Property که متغیرشو خود کامپایلر می سازه (به صورت مخفیانه)


    کد زیر، معادل کد بالاست (متغیرهاش به صورت مخفی تعریف می شه)


    کد:
    برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید

    و سوال بعدی اینکه متغیر از نوع کلاس
    Car رو به صورت Property تعریف کرده- اگر Property نمیزاشت چه فرقی میکرد؟
    بعد چطور میشه به طور مستقیم از set استفاده کرد؟ یا get ? کدام از متغیر ها رو برمیگردونه یا ست میکنه؟ تست کردم ارور میداد.
    Property مزیت های خیلی زیادی نسبت به متغیر داره.

    Property داده داخل شیء رو از کاربر مخفی نگه می داره. (ویژگی کپسوله‌سازی)
    Property قابلیت کنترل مقادیر رو هنگام مقداردهی فراهم می کنه. (قابلیت صحت سنجی)
    Property قابلیت استفاده از Databinding رو داره، اما متغیر چنین قابلیتی رو نداره.

    و و و

    بعد چطور میشه به طور مستقیم از set استفاده کرد؟ یا get ? کدام از متغیر ها رو برمیگردونه یا ست میکنه؟ تست کردم ارور میداد.
    Property ها مثل متغیر های معمولی استفاده می شن. موقع استفاده کامپایلر به صورت خودکار توابع Setter و Getter رو فراخوانی می کنه.
    Last edited by L͠øneWolf; 13-07-2014 at 14:44.

  3. 2 کاربر از L͠øneWolf بخاطر این مطلب مفید تشکر کرده اند


  4. #3
    آخر فروم باز
    تاريخ عضويت
    Nov 2009
    پست ها
    1,257

    پيش فرض

    سپاس گزارم از پاسخت اما نکته مبهم هنوز پابرجاست هست و اون اینه که بدون اینکه از کلاس Car ما چیزی new کنیم به راحتی ازش استفاده کردیم!! هنوز حافظه براش نگرفتایم. برای Customer حافظه گرفتیم اما برای Car هم انگار گرفته شده!

    در مورد Property ها هم درست می فرمائید اما اینجا که Property کارایی چی هست؟ چون نمیتونیم مستقیم که set یا get رو ازش فراخوانی کنیم. با حتما فیلد رو صراحتا ذکر کنیم.

  5. #4
    اگه نباشه جاش خالی می مونه L͠øneWolf's Avatar
    تاريخ عضويت
    Feb 2014
    محل سكونت
    ۴۱ تریلیون کیلومتری آلفا قنطورس
    پست ها
    294

    پيش فرض

    سپاس گزارم از پاسخت اما نکته مبهم هنوز پابرجاست هست و اون اینه که بدون اینکه از کلاس Car ما چیزی new کنیم به راحتی ازش استفاده کردیم!! هنوز حافظه براش نگرفتایم. برای Customer حافظه گرفتیم اما برای Car هم انگار گرفته شده!
    چون از Automatic Property استفاده کردیم، خود کامپایلر به صورت خوکار متغیر رو تعریف می کنه و باید برای استفاده خودمون بهش حافظه اختصاص بدیم. اگه از Property معمولی استفاده کرده بودیم، خودمون باید یه متغیر Private تعریف می کردیم و براش حافظه می گرفتیم.


    در مورد Property ها هم درست می فرمائید اما اینجا که Property کارایی چی هست؟ چون نمیتونیم مستقیم که set یا get رو ازش فراخوانی کنیم. با حتما فیلد رو صراحتا ذکر کنیم.
    Property حالت استاندارد استفاده از Filed هست. چون قابلیت [ برای مشاهده لینک ، با نام کاربری خود وارد شوید یا ثبت نام کنید ] رو برای ما فراهم می کنه (علاوه بر مزیت های زیاد دیگه ای که داره). از نظر شکل استفاده تفاوتی ندارن. اما بهتره همیشه از Property استفاده بشه.


    وقتی به جای Field از Automatic Property استفاده می کنیم هم خیالمون راحته که بعدا اگه لازم شد از توابع Setter و Getter استفاده کنیم، لازم نیست رابط کلاسمون رو تغییر بدیم و فقط پیاده سازیش رو تغییر می دیم...
    Last edited by L͠øneWolf; 13-07-2014 at 22:32.

  6. #5
    ناظر انجمن .NET Framework _H2_'s Avatar
    تاريخ عضويت
    Feb 2007
    محل سكونت
    یک جایی بین Framework و نارمک!
    پست ها
    4,746

    پيش فرض

    سلام
    ضمن موافقت با پست های اول و دوم و سوم باید عرض کنم...
    کدهای پست اول این تاپیک بدون شک موقع اجرا خطای NullReferenceException خواهند داد، کافی است امتحان کنید.؟؟؟!!!
    منطق روشن است شی car نمونه سازی و new نشده پس قابل استفاده نیست. باید قبل از استفاده new شود.
    کد ایراد داشته و اجرا نخواهد شد، مگر انکه Car یک struct باشد یا در جایی new شود.

  7. این کاربر از _H2_ بخاطر این مطلب مفید تشکر کرده است


  8. #6
    اگه نباشه جاش خالی می مونه L͠øneWolf's Avatar
    تاريخ عضويت
    Feb 2014
    محل سكونت
    ۴۱ تریلیون کیلومتری آلفا قنطورس
    پست ها
    294

    پيش فرض

    سلام
    ضمن موافقت با پست های اول و دوم و سوم باید عرض کنم...
    کدهای پست اول این تاپیک بدون شک موقع اجرا خطای NullReferenceException خواهند داد، کافی است امتحان کنید.؟؟؟!!!
    منطق روشن است شی car نمونه سازی و new نشده پس قابل استفاده نیست. باید قبل از استفاده new شود.
    کد ایراد داشته و اجرا نخواهد شد، مگر انکه Car یک struct باشد یا در جایی new شود.
    درسته دقت نکرده بودم. مرسی.
    منم ویرایش کردم.

Thread Information

Users Browsing this Thread

هم اکنون 1 کاربر در حال مشاهده این تاپیک میباشد. (0 کاربر عضو شده و 1 مهمان)

User Tag List

قوانين ايجاد تاپيک در انجمن

  • شما نمی توانید تاپیک ایحاد کنید
  • شما نمی توانید پاسخی ارسال کنید
  • شما نمی توانید فایل پیوست کنید
  • شما نمی توانید پاسخ خود را ویرایش کنید
  •