باسلام، در مقالات قبلی درمورد شی گرایی و ارث بری در سی شارپ صحبت کردیم، امروز می خوام کاربرد جالب ارث بری در پروژه های asp.net رو براتون بگم.
مسلما هیچ برنامه نویسی نمیاد فوت کوزه گریشو برای عموم روی سایتش منتشر کنه ، ولی چه کنیم که اینجا سایت نت نیک است و من هم خراب بازدید کنندگان سایتمم

در هنگام برنامه نویسی اگر شما خوب زبان برنامه نویسی ای که دارین باهاش کد میزنین رو بشناسین ، مسلما خیلی ترفند ها می تونین بکار ببرین تا حجم کد نویسیتون کمتر بشه ، کدهاتون حرفه ای تر و منظم تر بشن و تو پروژه های بعدیتونم بتونین از این کد ها استفاده بکنین.

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

سایت نت نیک|کاربر فوق العاده ارث بری در پروژه های asp.net (شعبده بازی با سی شارپ!)!

خوب اگر شما با شی گرایی و ارث بری به خوبی آشنا نباشین ، در بهترین حالت ممکن برای تمامی صفحلت پنل مدیریتیتون یک مستر پیج در نظر می گیرین و توی مستر پیجتون 2 تا لیبل و 2 تا کنترل Panel برای نمایش پیام های موفقیت آمیز و پیام های خطا قرار میدین (کنترل پنل برای اینه که بک گراند پیام های موفقیت آمیزمون رو سبز کنیم و بک گراند پیام های خطا رو قرمز کنیم و دو تا تصویر هم قرار بدین و ...)

در نهایت یک چیزی مثل این توی مستر پیج صفحات پنل مدیریتیتون خواهید داشت :

نمایش پیام خطا در asp.net

و برای نمایش پیام هاتون هم کدی همانند زیر رو توی همه صفحاتتون بابد بارها و بارها بنویسین :


خوب نوشتن 3 خط کد برای نمایش هر پیام کار درستیه ؟!
آیا خسته نمیشیم ؟!
مگه راه بهتری هم وجود داره ؟!

استفاده از ارث بری در ASP.Net !

برای حل مشکل بالا به تابعی نیاز داریم که بتوانیم توی همه صفحاتمون بهش دسترسی داشته باشیم و از طرفی هم تابع باید بتونه به کنترل های داخل مسترپیج صفحاتمون دسترسی داشته باشه.

برای این کار باید از ارث بری کمک بگیریم ، در مقاله قبلی (چطوری میشه از توی یک کلاس به کنترل های داخل یک صفحه دسترسی داشت ؟!) به این مورد اشاره کردیم و نمونه کدهایی هم دیدیم ، امروز کاملا با جزئیات کار آشنا خواهیم شد.

در asp.net تمامی صفحات ما از کلاس System.Web.UI.Page ارث بری می نمایند، حال طبق صحبت هایی که در بخش ارث بری کردیم ما یک کلاس با نام دلخواه (مثلا ShowMessage) می سازیم و آن را از کلاس System.Web.UI.Page ارث می دهیم ، حال تمامی کلاس هایمان را به جای System.Web.UI.Page از کلاس ShowMessage ارث می دهیم.

بدین صورت ، بر اساس قوانین ارث بری ، از طرفی تمامی صفحاتمان بصورت غیر مستقیم و از طریق کلاس ShowMessage از کلاس System.Web.UI.Page ارث برده اند و بنابراین مشکلی برای صفحات پیش نمی آید، حال آنکه از آنجایی که کلاس ShowMessage کلاس پذر تمامی صفحات است ، پس به تمامی کنترل های صفحات و همچنین به مسترپیج صفحات و تمامی کنترل های مسترپیج صفحات نیز دسترسی خواهیم داشت

همچنین تمامی صفحاتمان به تمامی توابع داخل کلاس ShowMessage دسترسی خواهند داشت.

بنابراین می توانیم درون کلاس ShowMessage تابعی بصورت زیر بنویسیم:



خوب کار تمام است ، شما یک حرکت خیلی باحال و جالب در پروژتون زدید ،
فکر نمی کنین خیلی کار خاصی کرده باشین ؟!
باور کنین کارتون خیلی خفن بوده ، منتها الان بدنتون گرمه حالیتون نیست


حالا توی صفحاتتون به جای یه خط کدی که قبلا می نوشتین ، یک نیم خط فقط کد می نویسین:

و این است معجزه شی گرایی و ارث بری
البته با کمی ابتکار می تونید کد بالا رو به یک کد جالب تر مثل این تبدیل کنین:


دقت کنین که متن پیام بصورت انتخابی (متغیر از نوع Enum) در آمده که کار رو خیلی راحت می کنه

جالبی دیگر کلاس ShowMessage اینه که شما می تونین به راحتی اونو توی همه پروژه هاتون کپی کنین و ازش استفاده کنین (مزیت فوق العاده شی گرایی اینه که یک با یک کلاس می نویسین ، یک عمر ازش استفاده می کنین ).

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

یک قانونی هست که میگه : هر جا دیدی داری کد تکراری می نویسی ، بدون کارت اشتباهه!

قانون دیگر میگه : کد تکراری کار دست نیست!

و من شخصا به این دو قانون 100% اعتقاد دارم.
با تشکر از دوست خوبم سیامک عزیز که هیچ وقت از بحث های برنامه نویسیش سیر نمیشم و نگاهم به برنامه نویسی رو مدیونشم.
موفق باشید.
یا حق

نوشته شده در تاریخ پنجشنبه 31 مرداد 1392    | توسط: ح.م    | طبقه بندی: آموزش ASP.NET،     | نظرات()