آموزش سي شارپ - قسمت بيست و يكم
Method Hiding in CSharp
پس بررسي مفهوم overriding خوب است كه كمي در رابطه با مفهوم Hiding هم صحبت كنيم. در واقعا Hiding دوباره نويسي يك متد است كه قبلا در كلاس پدر نوشته شده. اما نكته اي كه وجود دارد اين است كه در Hiding كامپايلر سي شارپ با توجه به نوع Reference شما متد را اجرا مي كند.
اگر مثال آخرين پست را بررسي كنيم متوجه مي شويم كه در آن مثال ما يك ليستي داشتيم از Emp ها (يك آرايه از Emp) كه در حقيقت اشيايي از MonthlyEmp و HourlyEmp را داخلشان قرار مي داديم. در واقع ما اشيايي از جنس كلاس هاي فزرند داشتيم اما به Referenceهايي از جنس كلاس هاي پدر. نكته حائز اهميت اين است كه وقتي روي اين اشياء متد ShowInfo را فراخواني مي كرديم. با اينكه ديد (Reference) ما به اشياء از نوع Emp بود ولي Salary را باتوجه به ماهيت اشياء (چيزي كه با آن newشده بودند)فراخواني مي كرد و به نوع Reference ما اهميت نمي داد. با استفاده از همين خاصيت ما Polymorphism را در مثال قبل پياده سازي كرديم.
Hiding در واقع نقطه مقابل Overriding است. به اين ترتيب كه شما بدون توجه به ماهيت شيء (چيزي كه new شده است)و صرفا با توجه به نوع Reference پياده سازي مربوطه را فرخواني مي كنين.
در مثال زير من يك كلاس به نام Person دارم كه متدي به نام Print را پياده سازي كرده است.
يك كلاس ديگر به نام Student از كلاس Person به ارث رفته و باز هم متد Print را پياده سازي كرده است. دقت بفرمائيد كه در Hiding هنگام پياده سازي مجدد از كلمه كليدي new استفاده خواهيم كرد.

پس در صورتيكه من يك شيء از جنس Student بسازم ولي ديدم را به Person محدود كنم. وقتي متد Print را فراخواني مي كنم پياده سازي كه در كلاس Person وجود دارد فراخواني مي شود. همانطور كه گفتيم در Hiding كامپايلر با توجه به Reference ما متد مورد نظر را فراخواني مي كند و به ماهيت شيء توجهي نمي كند.

بارگزاري مثال Hiding
ادامه دارد ...
اگر مثال آخرين پست را بررسي كنيم متوجه مي شويم كه در آن مثال ما يك ليستي داشتيم از Emp ها (يك آرايه از Emp) كه در حقيقت اشيايي از MonthlyEmp و HourlyEmp را داخلشان قرار مي داديم. در واقع ما اشيايي از جنس كلاس هاي فزرند داشتيم اما به Referenceهايي از جنس كلاس هاي پدر. نكته حائز اهميت اين است كه وقتي روي اين اشياء متد ShowInfo را فراخواني مي كرديم. با اينكه ديد (Reference) ما به اشياء از نوع Emp بود ولي Salary را باتوجه به ماهيت اشياء (چيزي كه با آن newشده بودند)فراخواني مي كرد و به نوع Reference ما اهميت نمي داد. با استفاده از همين خاصيت ما Polymorphism را در مثال قبل پياده سازي كرديم.
Hiding در واقع نقطه مقابل Overriding است. به اين ترتيب كه شما بدون توجه به ماهيت شيء (چيزي كه new شده است)و صرفا با توجه به نوع Reference پياده سازي مربوطه را فرخواني مي كنين.
در مثال زير من يك كلاس به نام Person دارم كه متدي به نام Print را پياده سازي كرده است.
يك كلاس ديگر به نام Student از كلاس Person به ارث رفته و باز هم متد Print را پياده سازي كرده است. دقت بفرمائيد كه در Hiding هنگام پياده سازي مجدد از كلمه كليدي new استفاده خواهيم كرد.
پس در صورتيكه من يك شيء از جنس Student بسازم ولي ديدم را به Person محدود كنم. وقتي متد Print را فراخواني مي كنم پياده سازي كه در كلاس Person وجود دارد فراخواني مي شود. همانطور كه گفتيم در Hiding كامپايلر با توجه به Reference ما متد مورد نظر را فراخواني مي كند و به ماهيت شيء توجهي نمي كند.
بارگزاري مثال Hiding
ادامه دارد ...
+ نوشته شده در شنبه چهاردهم اردیبهشت ۱۳۸۷ ساعت 10:19 توسط مسعود طباطبايي | MasoudTB
|