PDA

نسخه کامل مشاهده نسخه کامل : ما این طور اشتباه یاد گرفتیم!!



Life24
24-11-2013, 09:37
سلام

خسته نباشید عزیزان برنامه نویس



DriveInfo[] allDrives = DriveInfo.GetDrives();

اینجا آرایه ای از نوع DriveInfo رو تعریف کرده. به نام allDrives
یعنی هر خانه از allDrives از نوع DriveInfo هست.طبق تعریف و کتابی قضیه من همیشه این طور می نویسم و براش حافظه می گرفتم.




DriveInfo[] allDrives2 = new DriveInfo();


حالا تعریف بالا ارور داره به خاطر پارامتر ندادن بهش اما من منظورم کلی هست.
اما اینکه میاد بدون اینکه حافظه براش بگیره و new کنه ، میاد تابع GetDrives() رو داخلش میریزه. یعنی چی؟!!!
یعنی چه مقداری توش ریخته میشه؟! بدون new کردن؟!
امکان داره مثالی ساده بزنید که یک کلاس ساخته بشه و خودمون این کار رو بکنیم؟

این کد زیر مثالی از بدون آرایه بدون این مورد هست.




DateTime saveNow = DateTime.Now;


دعا گو دوستان هستیم :n16:

_H2_
24-11-2013, 22:20
سلام
اگر منظورتان این است که کدهایی شبیه این مینویسید ...

برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
جان من این شوخی ها را نکنید، قلبم ضعیف است! این کدها شدیداً اشتباه و خنده دار هستند.
نیاز به new وجود ندارد و این new اضافه، کاملاً بی مورد و بی معنی است.

در این مورد تا حدودی در تاپیک زیر صحبت کرده بودیم:
[ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ]
پیشنهاد میکنم مجدد مطالعه کنید.


متغییر ها ظرف هایی ساده هستند.
کدام کتاب؟ کدام مطلب؟ کدام دانش؟ بر این دلالت دارد که وقتی مقداری در متغییری میریزیم مقدار قبلی آن هم حفظ میشود؟؟؟؟؟
مثالی میزنم.
کد int x = 333 کدی صحیح است، به همان صحت و سلامت کد x = 5 ولی اگر پشت سرهم بیایند دیگر منطقی نیست، بلکه خنده دار است!
آیا به نظر شما کد زیر منطقی است؟

برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
چه بی منطقی در کد فوق وجود دارد؟
اگر کسی به شما بگوید که 333 را ریخته که x خالی نباشید، چطور جواب میدهید؟
به نظر شما چه توجیهی میتوان برای نوشتن دو خط فوق پشت سر هم آورد؟ آیا اصلاً هیچ توجیهی منطقی میتوان آورد؟
آیا نوشتن این دو خط کد پشت سرهم بی منطق و مضحک نیست؟

آیا بعد از x = 5 اثری از 333 قبلی باقی می ماند؟؟؟ چرا؟

برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
پس چطور انتظار دارید در دو خط فوق اثری از مقدار خط اول باقی بماند؟
ایا تفاوتی بین مثال متغییر x و مثال متغییر y فوق وجود دارد؟
نمی خواهید بگویید که اولی int است و دومی ANYTYPE ؟
این دو خط کد به همان اندازه مسخره و مضحک است که دو خط کد مثال x بوده.

در واقع بحث سر new نیست، ربطی به new ندارد.
بحث اصلی اینجاست که دو عمل جایگزینی با = پشت سر هم روی یک متغییر مشخص بی معنی است.
تنها موردی که منطقی است، حضور متغییر در سمت راست است مانند:

برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
این میتواند منطقی باشد ولی در سایر موارد (دو = پشت سر هم روی یک متغییر) معنی ندارد

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

==============

به گمانم اگر دقیق بخوانید به همه سوالاتتان پاسخ داده شد ولی این یکی را باز صراحتاً پاسخ میدهم:


... میاد تابع GetDrives() رو داخلش میریزه ... ؟

کدهای داخل تابع GetDrives اجرا و خروجی حاصل از آن (که یک شی new شده یا در حالت کلی شاید null باشد) را در متغییر شما میریزید.
درست عین تابع Add و متغییر z در تاپیکی که برای مطالعه پیشنهاد کردم.
[ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ]

==============

موفق باشید.