Make your own free website on Tripod.com

دروس مرتبط

 

  صفحه اصلی > مفاهیم کلی شی گرایی > ارث‌بري كلاس‌ها

   

 ارث‌بري كلاس‌ها

چند ريختي (Polymorphism)

> واسطها (Interfaces)

          مقدماتی

          پیشرفته

انديكسرها در #C

 
 

ارث‌بري كلاس‌ها

در اين درس درباره ارث‌بري در زبان برنامه‌نويسي C# صحبت خواهيم كرد. اهداف اين درس بشرح زير مي‌باشند :

    

       ارث‌بري(Inheritance)

     برقراري ارتباط كلاس مشتق شده با كلاس پايه

     مقدار دهي كلاس پايه از طريق كلاس مشتق شده

    

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

ارث‌بري(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.

در مثال 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 اجرا مي‌گردد.

 ابتدای صفحهF

برقراري ارتباط كلاس مشتق شده با كلاس پايه

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

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.

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

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

ابتدای صفحهF

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

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

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

خلاصه

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

ابتدای صفحهF  

Next

  صفحه اصلی
    C# آموزش
    مفاهیم شی گرایی
    برنامه های نمونه
    کار با محیط
    معرفی کتاب
    نقشه سایت
    درباره ما
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
       
       
       
       
       
       
       
       
       
       
       
       
       
       
       
       
       
       
       
       
       
       
       
       
       
       
       
       
       
       
       
       
       
       
       
       
       
       
       
       
       
       
       
       
       
       
       
       
       
       
       
       
       
       
       
       
       
       
       
       
       
       
       
       
       
       
       
       
       
       
       
       
       
       
       
       
       
       
       
       
       
       
       
       
       
       
       
       
       
       
       
       
       
       
       
       
       
       
       
       
       
       
       
       
       
       
       
       
       
       
       
       
       
       
       
       
       
       
       
       
       
       
       
       
       
       
       
       
       
       
       
       
       
       
       
       
       
                               
[صفحه اصلی] [آموزش #C] [مفاهیم شی گرایی] [برنامه های نمونه] [کار با محیط] [معرفی کتاب] [نقشه سایت] [درباره ما]