کلاس Abstract در سی شارپ
کلاس Abstract در سی شارپ : کلاسی که نمی توانیم از آن نمونه سازی کنیم فقط در ارث بری می توانیم از آن استفاده کنیم .
دو مثال می زنیم تا این مفهوم خوب جا بیفتد.
تو دنیای واقعی اگر نگاه کنیم همه موجودات زنده در این کره ی خاکی هم می توانند حرکت کنند و هم می توانند نفس بکشند حرکت کردن انسان با راه رفتن است ، ماهی با شنا کردن ،کانگرو با جهیدن و……. و نفس کشیدن انسان با شش است و نفس کشیدن ماهی با آبشش
پس هر موجود زنده دو تا متد را دارد یکی متد حرکت کردن یکی متد نفس کشیدن اگر برای یکی از آن متدها را یادمان برود مثلا رفتار حرکت کردن را براش در نظر نگیریم آن موجود زنده دیگر نتواند حرکت کند ودر یکجا ساکن بماند کم کم میمرد .
پس من باید این را الزام کنم که تمام موجودات زنده باید دو تا رفتار نفس کشیدن و حرکت کردن را داشته باشند. برای این الزام یک کلاس Abstract در نظر می گیریم.
Abstract یعنی خلاصه ،چکیده، یعنی به جزئیات توجه نکردن .
یک کلاس Abstract را یک استاندارد در نظر می گیریم که همه موجودات زنده باید نفس بکشند و حرکت کنند.
نکته: وقتی که رسید به کلاس انسان ها داخل کلاس انسان ها کلاس Abstract پیاده سازی می شود. داخل خود کلاس Abstract پیاده سازی انجام نمی دهیم فقط آن امضا تابع یا امضا آن رفتار را می نویسیم.
الان وقتی که داخل کلاس انسان ها رسید متد حرکت کردن آن می شود راه رفتن و وقتی داخل کلاس ماهی ها رسید متد حرکت کردن آن می شود شنا کردن برای بقیه موجودات زنده هم همین طور است وقتی که رسید داخل کلاس خودشان جزیئات را برایشان بیان می کنیم.
یک مثال دیگری می زنیم برای مهندسی نرم افزار:
سه نفر برنامه نویس را داشته باشیم که با هم کار می کنند و این سه برنامه نویس 3 تا کلاس را طراحی می کنند برای مثال یکی از این برنامه نویس ها می آید داخل کلاس خودش متد اضافه کردن را Insert در نظر می گیرد و یکی دیگر از آن ها برای متد اضافه کردن Add را در نظر می گیرد و دیگری برای متد اضافه کردن،اضافه کردن را در نظر می گیرد .
و یکی از این برنامه نویس ها می آید داخل کلاس خودش متد حذف را Delete و یکی دیگر Remove و دیگری اصلاً یادش می رود که این متد را داخل کلاسش پیاده سازی کند. هیچ کدام از این برنامه نویس ها حاضر نیستند که قوانین طرف مقابل را بپذیرند و هر کدام دلایل خودشان را دارند.
ما باید یک استاندارد در نظر بگیریم و آن متد هایی که لازم است با اسم های خاص در کلاس Abstract در نظر بگیریم مثلاً متد Insert، Update، Delete داشته باشیم و این کلاس Abstract را به آن سه تا برنامه نویس می دهیم همه ی برنامه نویسان موظف هستند که آن متدها را با آن نام ها در نظر بگیرید و پیاده کنند و همه هم موظف هستند که همه ی آن متدها را پیاده سازی کنند نه این که یکی از متدها را فراموش کنند.
یک کلاس ایجاد می کنیم:
class ClassA
{
}
از این کلاس یک نمونه می سازیم:
و برنامه را اجرا می کنیم و مشاهده می کنیم که هیچ مشکلی نیست و برنامه اجرا می شود. حالا یک کلمه ی Abstract قبل از کلمه ی کلیدی class می گذاریم و این کلاس را تبدیل به کلاس abstract می کنیم:
abstract class ClassA
{
}
از این کلاس یک نمونه می سازیم:
و الان مشاهده می کنید که به ما error می دهد و می گوید که کلاس abstract است و شما نمی توانید نمونه سازی انجام دهید.
نکته: کلاس abstract در سی شارپ کلاسی است که نمی توانیم از آن نمونه سازی کنیم فقط در ارث بری می توانیم از آن استفاده کنیم .
نکات دیگری که در کلاس abstract در سی شارپ وجود دارد :
abstract class ClassA
{
public int ID;
public string Name;
public abstract void Insert();
public abstract void Update();
public void Delete()
{
}
- در کلاس abstract می توانیم فیلد داشته باشیم .
- یک کلاس abstract هم می تواند متد abstract داشته باشد هم متد غیر abstract .
- کلاسی که abstract نباشد نمی تواند متد abstract داشته باشد.
- در کلاس abstract چون جزئیات را در نظر نمی گیرد در کلاس های دیگر باید با دستور override پیاده سازی کنیم.
اگر کلاسی از کلاس abstract ارث بری کند فلش کنار آن را بزنیم تمام متدهایی که از نوع abstract است را به ما نمایش می دهد و با زدن اینتر آنها را برای ما پیاده سازی می کند.
class ClassB : ClassA
{
public override void Insert()
{
}
public override void Update()
{
}
}
امیدواریم کلاس Abstract در سی شارپ را به خوبی آموخته باشید. شما می توانید نظر خود را درباره این آموزش در قسمت دیدگاه ها ثبت کنید.
عالی.جامع.زیبا
سلام و خسته نباشید به نویسنده عالی بودش یه گذاشتن مطالب مفیدتون ادامه بدید
بعد مدت ها تازه فهمیدم abstract class یعنی چی ممنونمممممممم
سلام و عرض ادب
از ارسال نظر شما ممنون هستیم.
با تشکر از همراهی شما
بسیار عالی، بسیار کامل ممنونم
سلام و عرض ادب
رضایت شما موجب خرسندی ماست.
با تشکر از همراهی شما
عالی بود مرسی
سلام ، خیلی خوب توضیح داده شده بود. سپاسگزارم
این به چه دردی میخوره؟
سلام و عرض ادب.
این نوع کلاس بیشتر در پروژه های تجاری بزرگ استفاده می شوند و هر فرزندی که از این کلاس به ارث ببرند می تواند توابع را بر اساس نیاز خود پیاده سازی کند.
ممنون از توضیحات خوبتون راستش نمیدونم سوالم صحیح هست یا نه میخواستم بدونم خوب چرا به جای این نوع کلاس از اینترفیس استفاده نمیشه آخه فکر میکنم خیلی به هم شبیه هستند
سلام و عرض ادب. لطفا به لینک زیر مراجعه نمایید:
https://www.dotnettips.info/post/2884/%D8%AA%D9%81%D8%A7%D9%88%D8%AA-%D8%A8%DB%8C%D9%86-interface-%D9%88-%DA%A9%D9%84%D8%A7%D8%B3-abstract-%D8%AF%D8%B1-%DA%86%DB%8C%D8%B3%D8%AA
عالیییییی بود ممنونم
من یه خرده گیج شدم
پس فرقش با اینترفیس چیه ؟
اونم اگه ازش ارثبری شه باید از متود هاش استفاده بشه
این و ببین
https://www.dntips.ir/post/2884/%D8%AA%D9%81%D8%A7%D9%88%D8%AA-%D8%A8%DB%8C%D9%86-interface-%D9%88-%DA%A9%D9%84%D8%A7%D8%B3-abstract-%D8%AF%D8%B1-%DA%86%DB%8C%D8%B3%D8%AA
خیلی خوب و مختصر و عالی گفتی، مرسی
خیلی عالی بیان کرده بودید ..دست شما درد نکنه
عالی بود خسته نباشید
خوب بود تشکر
سلام و عرض ادب از انرژی مثبت شما سپاسگزاریم.
عالی
خیلی روون و ساده مفهوم رو توضیح داده بود. واقعا ممنونم
سلام و عرض ادب
رضایت شما موجب خرسندی ماست.
با تشکر از همراهی شما
خیلی عالی بود واقعا مرسی
خیلی زیبا و عالی و کامل بود واقعا لذت بردم خیلی ممنونم
سلام و عرض ادب
رضایت شما موجب خرسندی ماست و حمایت شما برای ما بسیار ارزشمند است.
با تشکر از همراهی شما
رو
ردنم انداختی یه تشکر ازت کنم دمت گرم .خیلی روون و ساده
سلام و عرض ادب
رضایت شما موجب خرسندی ماست و حمایت شما برای ما بسیار ارزشمند است.
با تشکر از همراهی شما
چقدر خوب توضیح دادین
افرین
سلام و عرض ادب
رضایت شما موجب خرسندی ماست و حمایت شما برای ما بسیار ارزشمند است.
با تشکر از همراهی شما