ارث‌بري كلاس‌ها در سی شارپ

چهارشنبه 29 خرداد 1392

ارث‌بري كلاس‌ها در سی شارپ <br/> ارث‌بري يكي از مفاهيم اساسي و پايه شي‌گرايي است. با استفاده از اين ويژگي امكان استفاده مجدد از كد موجود فراهم مي‌شود. بوسيله استفاده موثر از اين ويژگي كار برنامه‌نويسي آسان‌تر مي‌گردد.

ارث‌بري يكي از مفاهيم اساسي و پايه شي‌گرايي است. با استفاده از اين ويژگي امكان استفاده مجدد از كد موجود فراهم مي‌شود. بوسيله استفاده موثر از اين ويژگي كار برنامه‌نويسي آسان‌تر مي‌گردد.

ارث‌بري(Inheritance)

خروجي اين برنامه بصورت زير است :

در مثال 1-8 دو كلاس وجود دارد. كلاس بالاي ParentClass و كلاس پائيني ChildClass است. كاري كه ميخواهيم در اينجا انجام دهيم اينست كه زير كلاسي ايجاد كنيم كه با استفاده از كدهاي موجود در ParentClass عمل نمايد.

براي اين منظور ابتدا بايد در اعلان ChildClass مشخص كنيم كه اين كلاس مي‌خواهد از كلاس ParentClass ارث‌بري داشته باشد. اين عمل با اعلان public class ChildClass : ParentClass روي مي‌دهد. كلاس پايه با قرار دادن ":" بعد از نام كلاس مشتق شده معين مي‌شود.

C# فقط از ارث‌بري يگانه پشتيباني مي‌نمايد. از اينرو تنها يك كلاس پايه براي ارث‌بري مي‌توان معين نمود. البته بايد اشاره كرد كه ارث‌بري چندگانه تنها از واسطها (Interfaces) امكان‌پذير است كه در درسهاي آينده به آنها اشاره مي‌نماييم.

ChildClass دقيقاً توانائيهاي ParentClass را دارد. از اينرو مي‌توان گفت ChildClass يك ParentClass است. (ChildClass IS a ParentClass) ChildClass داراي متد Print() مربوط به خود نيست و از متد كلاس ParentClass استفاده مي‌كند. نتيجه اين عمل در خط سوم خروجي ديده مي‌شود.

كلاسهاي پايه به طور خودكار، قبل از كلاس‌هاي مشتق شده نمونه‌اي از روي آنها ايجاد مي‌گردد. به خروجي مثال 1-8 توجه نماييد. سازنده ParentClass قبل از سازنده ChildClass اجرا مي‌گردد.

برقراري ارتباط كلاس مشتق شده با كلاس پايه
به مثال 2-8 كه در زير آمده است توجه نماييد.

خروجي اين برنامه بشكل زير است :

كلاسهاي مشتق شده در طول ايجاد نمونه مي‌توانند با كلاس پايه خود ارتباط برقرار نمايند. در مثال 2-8 چگونگي انجام اين عمل را در سازنده ChildClass نشان مي‌دهد. استفاده از " : " و كلمه كليدي base باعث فراخواني سازنده كلاس پايه به همراه ليست پارامترهايش مي‌شود. اولين سطر خروجي، فراخواني سازنده كلاس پايه را بهمراه رشته "From Derived" نشان مي‌دهد.

ممكن است حالتي رخ دهد كه نياز داشته باشيد تا متد موجود در كلاس پايه را خود پياده‌سازي نماييد. كلاس Child اين عمل را با اعلان متد Print() مربوط به خود انجام مي‌دهد. متد Print() مربوط به كلاس Child، متد Print() كلاس Parent را پنهان مي‌كند. نتيجه اين كار آنست كه متد Print() كلاس Parent() تا زمانيكه عمل خاصي انجام ندهيم قابل فراخواني نمي‌باشد.

درون متد Print() كلاس Child، صريحاً متد Print() كلاس Parent را فراخواني كرده‌ايم. اين عمل با استفاده از كلمه كليدي base قبل از نام متد انجام گرفته است. با استفاده از كلمه كليدي base مي‌توان به هر يك از اعضاي public و protected كلاس پايه دسترسي داشت. خروجي مربوط به متد Print() كلاس Child در سطرها سوم و چهارم خروجي ديده مي‌شوند.

روش ديگر دسترسي به اعضاي كلاش پايه، استفاده از Casting صريح است. اين عمل در آخرين سطر از متد Main() كلاس Child رخ داده است. توجه داشته باشيد كه كلاس مشتق شده نوع خاصي از كلاس پايه‌اش مي‌باشد. اين مسئله باعث مي‌شود تا بتوان كلاس مشتق شده را مورد عمل Casting قرار داد و آنرا نمونه‌اي از كلاس پايه‌اش قرار داد. آخرين خط خروجي نشان مي‌دهد كه متد Print() كلاس Parent اجرا شده است.

به وجود كلمه كليدي new در متد Print() كلاس Child توجه نماييد. اين عمل باعث مي‌شود تا متد Print() كلاس Child متد Print() كلاس پايه‌اش را پنهان نمايد. درصورتيكه از كلمه كليدي new استفاده نشود، كامپايلر پيغام اخطاري را تواليد مي‌كند تا توجه شما را به اين مسئله جلب كند. توضيحات بيشتر در اين زمينه مربوط به مبحث چندريختي (Polymorphism) است كه در درس آينده آنرا بررسي خواهيم نمود.

خلاصه
در اين درس با روش ايجاد كلاس پايه و كلاس مشتق شده از آن آشنا شديد. متدهاي كلاي پايه را مي‌توانيد بصورت صريح و يا ضمني فراخواني كنيد. همچنين متوجه شديد كه كلاس مشتق شده نوع خاصي از كلاس پايه است.

ایمان مدائنی

نویسنده 1299 مقاله در برنامه نویسان
  • C#.net
  • 1k بازدید
  • 3 تشکر

کاربرانی که از نویسنده این مقاله تشکر کرده اند

در صورتی که در رابطه با این مقاله سوالی دارید، در تاپیک های انجمن مطرح کنید