آموزش سي شارپ - قسمت شانزدهم
در پست دوازدهم در مورد اين موضوع صحبت كرديم كه در دات نت تمامي كلاس ها از يك كلاس به نام Object به ارث مي روند. در اين پست مي خواهيم كمي در مورد Inheritance بيشتر صحبت كنيم:
توارث در سي شارپ - Inheritance in CSharp
توارث يا به ارث بري همانطور كه از اسمش پيداست به اين معني است كه شما يه سري خواص و رفتار ها را از يك كلاس ديگر (كلاس پدر - Parent Class) به ارث ببرين و در نتيجه از همان امكانات و خصوصيات بدون نوشتن دوباره آن ها استفاده كنين. و در مواردي كه لازم مي دانين رفتار هاي آن ها را تغيير دهيد. اين اتفاقي است كه در دنياي واقعي نيز وجود دارد. به عنوان مثال شما احتمالا رنگ پوست , رنگ مو , رنگ چشم و شايد خصوصيات رفتاري و ... خود را از پدر و مادرتان به ارث ببرين. البته ممكن است كه شما رنگ مو خودتان را با استفاده از رنگ مو تغيير دهيد يا اينكه اخلاق و رفتارتان را با توجه به افكارتان به نسبت پدر يا مادرتان متفاوت باشد.
همانطور كه در مثال بالا هم ديديم Inheritance نيز به مانند بسياري از اصولا Object Oriented از دنياي واقعي الگو برداري شده است و كاملا قابل درك مي باشد.
فرض بفرمائيد كه من يك كلاس به نام Person يا همان انسان دارم. در اين كلاس خصوصيات "نام" و "سن" و همچنين يك متد به نام Print كه اطلاعات را براي من چاپ مي كند , تعريف شده اند. حالا يك كلاس به نام Emp يا كارمند ايجاد مي كنم. بعد از بررسي اين كلاس متوجه مي شوم كه كلاس Emp من داراي خصوصيات مشتركي با Person مي باشد و در نتيجه تصميم مي گيرم كه به جاي پياده سازي مجدد , از امكانات كلاس Person استفاده كنم.
حالا اجازه بدين روش پياده سازي Inheritance رو در سي شارپ بررسي كنيم.

اگر بخواهيم Class Diagram مثال فوق را رسم كنيم شكل زير پديد خواهد آمد:

حالا به جملاتي كه من مي پرسم با دقت پاسخ دهيد.
1. به نظر شما يك كارمند الزما يك انسان است؟
2. مي توان گفت كه هر انسان الزما يك كارمند است؟
جواب سوال اول مسلما "بله" خواهد بود. چرا كه وقتي يك كلاس (كارمند) از كلاس ديگر (انسان) به ارث مي رود با اطمينان مي توان گفت كه اشياء اين كلاس از جنس پدر نيز هستند.
جواب سوال دوم كاملا به شيء مورد نظر بستگي دارد و اصولا در سي شارپ اين كار به صورت عادي امكان پذير نيست.
اجازه بدين سوالات بالا رو به صورت سي شارپي ببينيم؟
حالا اجازه بدين روش پياده سازي Inheritance رو در سي شارپ بررسي كنيم.
public class Person
{
public string Name;
public int Age;
public void Print()
{
Console.WriteLine("Name:{0},Age:{1}", Name, Age);
}
}
public class Emp : Person
{
}

اگر بخواهيم Class Diagram مثال فوق را رسم كنيم شكل زير پديد خواهد آمد:
حالا به جملاتي كه من مي پرسم با دقت پاسخ دهيد.
1. به نظر شما يك كارمند الزما يك انسان است؟
2. مي توان گفت كه هر انسان الزما يك كارمند است؟
جواب سوال اول مسلما "بله" خواهد بود. چرا كه وقتي يك كلاس (كارمند) از كلاس ديگر (انسان) به ارث مي رود با اطمينان مي توان گفت كه اشياء اين كلاس از جنس پدر نيز هستند.
جواب سوال دوم كاملا به شيء مورد نظر بستگي دارد و اصولا در سي شارپ اين كار به صورت عادي امكان پذير نيست.
اجازه بدين سوالات بالا رو به صورت سي شارپي ببينيم؟
Emp e = new Emp();
e.Name = "Ali";
e.Age = 22;
Person p = e; // اين كاملا در سي شارپ امكان پذير است
Person p = new Person();
p.Name = "Ali";
p.Age = 44;
Emp e = p; // اين خط از كد خطا توليد مي كند.
+ نوشته شده در دوشنبه ششم اسفند ۱۳۸۶ ساعت 10:9 توسط مسعود طباطبايي | MasoudTB
|