آموزش سی شارپ c# درس هشتم

 
ارسال شده در تاریخ 1392/7/22 توسط admin در زمینه آموزش سی شارپ
 
درس هشتم - ار ثبری کلاسها
 
در این درس درباره ار ثبری در زبان برنامه نویسی C# صحبت خواهیم کرد . اهداف این درس بشرح زیر می باشند : پیاده سازی کلاسهای پایه (Base Class)
پیا دهسازی کلاسهای مشتق شده (Derived Class) مقدار دهی کلاس پایه از طریق کلاس مشتق شده فراخوانی اعضای کلاس پایه پنهان سازی اعضای کلاس پایه
 
ارث بری یکی از مفاهیم اساسی و پایه شی گرایی است . با استفاده از این ویژگی امکان استفاده مجدد از کد موجود فراهم می شود . بوسیله استفاده موثر از این ویژگی کار برنامهنویسی آسا نتر میگردد .
 
ار ثبری (Inheritance)
using System;
 
public class ParentClass
{
public ParentClass()
{
Console.WriteLine("Parent Constructor.");
}
public void print()
{
Console.WriteLine("I"m a Parent Class.");
}
}
public class ChildClass : ParentClass
{
public ChildClass()
{
Console.WriteLine("Child Constructor.");
}
public static void Main()
{
ChildClass child = new ChildClass(); child.print();
}
}
خروجی این برنامه بصورت زیر است :
Parent Constructor. Child Constructor. I"m a Parent Class.
 
www.IranPROJE.com
در مثال 8-1 دو کلاس وجود دارد . کلاس بالای ParentClass و کلاس پائینی ChildClass است . کاری که میخواهیم در اینجا انجام دهیم اینست که زیر کلاسی ایجاد کنیم که با استفاده از کدهای موجود در ParentClass عمل نماید .
 
برای این منظور ابتدا باید در اعلان ChildClass مشخص کنیم که این کلاس می خواهد از کلاس ParentClass ار ثبری داشته باشد . این عمل با اعلان public class ChildClass : ParentClass روی می دهد . کلاس پایه با قرار دادن ":" بعد از نام کلاس مشتق شده معین میشود .
 
C# فقط از ار ث بری یگانه پشتیبانی می نماید . از اینرو تنها یک کلاس پایه برای ار ث بری می توان معین نمود . البته باید اشاره کرد که ار ثبری چندگانه تنها از واسطها (Interfaces) امکا نپذیر است که در درسهای آینده به آنها اشاره مینماییم .
 
ChildClass دقیقاً توانائیهای ParentClass را دارد . از اینرو می توان گفت ChildClass یک ParentClass است . ChildClass (ChildClass IS a ParentClass) دارای متد Print() مربوط به خود نیست و از متد کلاس ParentClass استفاده میکند . نتیجه این عمل در خط سوم خروجی دیده می شود .
 
کلاسهای پایه به طور خودکار، قبل از کلاس های مشتق شده نمونه ای از روی آنها ایجاد می گردد . به خروجی مثال 8-1 توجه نمایید . سازنده ParentClass قبل از سازنده ChildClass اجرا می گردد .
 
برقراری ارتباط کلاس مشتق شده با کلاس پایه به مثال 8-2 که در زیر آمده است توجه نمایید .
using System;
 
public class Parent
{
string parentString; public Parent()
{
Console.WriteLine("Parent Constructor.");
}
public Parent(string myString)
{
parentString = myString;
Console.WriteLine(parentString);
}
public void print()
{
Console.WriteLine("I"m a Parent Class.");
}
}
public class Child : Parent
{
public Child() : base("From Derived")
{
Console.WriteLine("Child Constructor.");
 
 
}
public new void print()
{
base.print();
Console.WriteLine("I"m a Child Class.");
}
public static void Main()
{
Child child = new Child(); child.print();
((Parent)child).print();
}
}
خروجی این برنامه بشکل زیر است :
From Derived Child Constructor. I"m a Parent Class. I"m a Child Class. I"m a Parent Class.
کلاسهای مشتق شده در طول ایجاد نمونه می توانند با کلاس پایه خود ارتباط برقرار نماین د . در مثال 8-2 چگونگی انجام این عمل را در سازنده 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 اجرا شده است .
 www.IranPROJE.com
به وجود کلمه کلیدی new در متد Print() کلاس Child توجه نمایید . این عمل باعث می شود تا متد Print() کلاس Child متد Print() کلاس پایه اش را پنهان نماید . درصورتیکه از کلمه کلیدی new استفاده نشود، کامپایلر پیغام اخطاری را توالید
 
www.IranPROJE.com
می کند تا توجه شما را به این مسئله جلب کند . توضیحات بیشتر در این زمینه مربوط به مبحث چندریختی (Polymorphism) است که در درس آینده آنرا بررسی خواهیم نمود .
 
خلاصه
در این درس با روش ایجاد کلاس پایه و کلاس مشتق شده از آن آشنا شدی د . متدهای کلای پایه را میتوانید بصورت صریح و یا ضمنی فراخوانی کنید . همچنین متوجه شدید که کلاس مشتق شده نوع خاصی از کلاس پایه است .

www.IranPROJE.com

Copyright © 2014 icbc.ir