ورود

نسخه کامل مشاهده نسخه کامل : پیاده سازی IComparable



Life24
01-01-2014, 01:37
سلام،
[ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ]
اگر ممکن هست ببنید.
من تو همین قسمت اول مشکل دارم!


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

به تایع Sort یک "آرایه ای از شی " را پاس مدهیم.
به طور پیش فرض IComparable رو پیاده کردیم تا مرتب سازی کنه
برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید

حالا
اینترفیسی که پیاده کردیم داره یک نوع داد ه از نوع آبجکت رو میگیره،درصورتی که ما آرایه از اشیا رو براش فرستادیم.نه یک عدد آبجکت تنها
حتی برای اثبات این حرف تونسته Cast کنه به نوع car پس یک دونه ارسال شده؟ اما ما یک آرایه فرستادیم.

و قسمت دوم:
برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
اینجا شی که از ورودی به عنوان پارامتر گرفته رو مقایسه میکنه با this.make
اینجا this کی و کدام شی هست؟!؟
بر چه اساس تعین میشه هر سری کدام شی باشه؟
پشت پرده داره چه اتفاقی میافته؟ ظاهرا متد Sort یک سری توابع مرتب سازی برای خودش داره و ما فقط فیلد که میخواهیم مقایسه کنیم را بهش میدهیم.
در سی شارپ اینقدر مدیریت کارها رو کامپایلر برعهده گرفته که گاهی اوقات آدم گیج میشه که پشت پرده چه خبره؟
راستش نمیشه از موضوع سریع رد شد و پذیرفت .میخواهم عمقی یاد بگیرم. :n03:

_H2_
06-01-2014, 23:08
سلام
واسط IComparable شما یک شی (شی جاری=this) را با یک شی دیگر مقایسه میکند. درواقع دو شی با هم.
به مثال زیر دقت کنید:

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

در آخرین خط کد فوق دقت کنید...
در این خط مقدار x با y مقایسه میشود که در این خط x همان this است و y همان obj ...

=====

در توابعی مانند Sort در زیرساختش حلقه ای دارد که عناصر را با هم مقایسه و چیدمانشان را تغییر میدهد.
مجدد به خط آخر کد فوق دقت کنید...
نکته مهم آن است که با IComparable شما امکان مقایسه دو نمونه شی را با هم فراهم ساخته اید
یعنی دیگر میتوان هر دو نمونه Class1 را با هم مقایسه کرد...
تابعی مانند Sort هم فقط به همین نیاز دارند، آنها میخواهند دو تا شی را بتوانند با هم مقایسه کنند و سپس با الگوریتم دلخواه خود در حلقه ای چیدمان این عناصر را تغییر دهد.

امیدوارم به جواب هایتان رسیده باشید باز اگر نکته ابهامی بود بفرمائید
موفق باشید.