تبلیغات
میهن وب هاست

آموزش سی شارپ – مفاهیم تکمیلی ارث بری

نویسنده : امیر

نظرات : ۰ دیدگاه

بازدید : ۵۶ بازدید

تاریخ : ۱۱ خرداد ۱۳۹۷

در این جلسه از مبحث آموزش برنامه نویسی سی شارپ قصد داریم مباحث sealed و Interface و Enumerations را بررسی کنیم.

 

حتما قبل از بررسی مفاهیم تکمیلی ارث بری نوشته ی مطالب قبلی این دوره ی آموزشی را با هشتگ #دوره آموزشی_سی_شارپ در سایت ما را مطالعه کنید.

 

استفاده از sealed برای جلوگیری از ارث‌بری :

واژه‌ی sealed به معنای مهر و موم شده است و نمی توان از یک کلاس مهر و موم شده ارث‌بری کرد. به‌منظور sealedکردن یک کلاس، کافی است که در ابتدای تعریف کلاس از کلمه‌ی کلیدی sealed استفاده کنید. دقت داشته باشید که یک کلاس را نمی‌توان هم به‌صورت sealed و هم به‌صورت abstract تعریف کرد چراکه کلاس abstract به تنهایی کامل نیست و برای این‌که اجرای کاملی داشته باشد وابسته به کلاس‌های مشتق‌شده از خودش است.

به مثال زیر دقت کنید:

در مثال بالا، کلاس A به‌صورت sealed تعریف شده است بنابراین هیچ کلاسی نمی‌تواند از این کلاس ارث‌بری کند.

به این معنا که B نمی‌تواند از کلاس sealed شده‌ی A ، ارث‌بری کند. نکته‌ی دیگر این است که sealed می‌تواند در virtual methods نیز برای پیش‌گیری از overrideشدن مورد استفاده قرار گیرد.

به نمونه‌ی زیر توجه کنید:

در این‌جا، کلاس B یک متد virtual دارد که در کلاس D هم override و هم sealed شده است. از این‌رو کلاس‌هایی که از D ارث‌بری می‌کنند دیگر نمی‌توانند ()MyMethod را override کنند زیرا این متد دیگر sealed شده است.

 

مفهوم Interfaces :

یک interface مجموعه‌ای از متدها را تعریف می‌کند که توسط یک کلاس اجرا خواهند شد. یک interface هیچ متدی را اجرا نمی‌کند، از این‌رو، interface یک سازه‌ی کاملاً منطقی است که فقط نشان‌دهنده‌ی قابلیت و عملکرد است و هیچ قسمت اجرایی ندارد. Interface از نظر syntax متشابه با abstract class است. در interface نیز متدها بدنه ندارند و این بدین معنی است که در interface متدها اجرا نمی‌شوند. Interface مشخص می‌کند که چه کاری باید انجام شود اما به چگونه‌گی انجام شدن آن اهمیت نمی‌دهد. هنگامی‌که یک interface تعریف می‌شود، هر تعداد کلاس که بخواهید می‌توانید این interface را اجرا کنند. همچنین یک class می‌تواند به تعداد دلخواه interface اجرا کند.
Interface توسط کلمه‌ی کلیدی interface تعریف می‌شود. در زیر فرم ساده شده‌ی یک interface را می‌بینید:

در زیر یک نمونه از interface را می‌بینید که مشخص کننده‌ی interface یک class است که یک سری عدد را تولید می‌کند:

علاوه بر متدها، interface می‌تواند دارای property، indexer و event باشد. Interfaceها نمی‌توانند data member داشته باشند. آن‌ها همچنین دارای constructor، destructor و operator methods نیستند و هیچ عضوی نمی‌تواند در آن‌ها به‌صورت static تعریف شود.

 

اجرای interfaceها :

زمانی‌که یک interface تعریف می‌شود، یک یا چند کلاس می‌توانند این interface را اجرا کنند. برای اجرای یک interface، نام آن را بعد از نام کلاس (به همان طریقی که نام base class را می‌نوشتید) می‌نویسید.

فرم کلی کلاسی که یک interface را اجرا می‌کند به شکل زیر است:

هنگامی‌که کلاسی می‌خواهد یک interface را اجرا کند، بایستی به‌طور کامل آن interface را اجرا کند و نمی‌تواند فقط بخشی از آن را برای اجرا انتخاب کند.
یک کلاس می‌تواند بیشتر از یک interface را اجرا کند. برای این منظور، پس از نام کلاس، لیست اسامی interfaceهای مورد نظر را توسط کاما از هم جدا می‌کند. یک کلاس هم می‌تواند از یک کلاس دیگر ارث‌بری کند و هم چندین interface را اجرا کند. در این مورد باید نام base class را در ابتدای لیستی که توسط کاما از هم جدا کرده‌اید، قرار دهید.
متدهایی که interface را اجرا می‌کنند باید public باشند زیرا متدها درون interface به‌صورت implicitly public هستند و از این‌رو اجرای آن‌ها نیز باید public باشد. همچنین return type و signature متدهای اجرایی باید دقیقاً با متدهای تعریف شده در interface مطابقت داشته باشد.

مثال :

 

استفاده از reference variable های interface :

می‌توانید interface reference variable بسازید. این‌چنین متغیری می‌تواند به هر شیء‌ای که interfaceاش را اجرا می‌کند، رجوع کند. هنگامی‌که متد یک شیء را از طریق interface reference صدا می‌زنید، آن نسخه از متد که شیء مربوط به آن، interface را اجرا کرده است، اجرا می‌شود. این پروسه شبیه به استفاده از base class reference برای دسترسی به شیء derived class است.

مثال :

 

بررسی Interface Properties :

همانند متدها، properties در interface بدونه بدنه تعریف می‌شوند.

در زیر فرم کلی تعریف property در interface را می‌بینید:

تعریف property در interface مشابه با تعریف auto-implemented property در کلاس است، اما این دو یکی نیستند. این روش تعریف property در interface باعث نمی‌شود که auto-implement باشد بلکه این تنها مشخص کننده‌ی نام و نوع property است. همچنین اجازه تغییر access modifier را در قسمت get و set ندارید. به‌عنوان مثال نمی‌توانید set accessor را در interface به‌صورت private در نظر بگیرید.

مثال :

مفهوم Enumerations :

یک enumeration مجموعه‌ای از integerهای نام‌گذاری شده است. نوع enumeration توسط کلمه‌کلیدی enum تعریف می‌شود.

فرم کلی یک enumeration به شکل زیر است:

در این‌جا، نام این enumeration توسط name مشخص شده است و enumeration list لیستی از شناسه‌ها است که توسط کاما از هم جدا شده‌اند. در مثال زیر یک enumeration به اسم Apple وجود دارد که انواع مختلفی از Apple را لیست کرده است:

 

 

خب این جلسه هم به پایان رسید باید به این نکته توجه کنید که مباحث بالا در برنامه نویسی تجاری اهمیت فراوانی دارد.

برای استفاده از تمامی جلسات از هشتگ #دوره آموزشی_سی_شارپ در سایت ما استفاده کنید.

منتظر جلسه ی بعدی دوره آموزشی سی شارپ باشید.

با دوستانتان به اشتراک بگذارید

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

*

code

مطالب زیر را از دست ندهید: