در اين درس به بررسي چند ريختي در زبان C# خواهيم پرداخت. اهداف اين درس عبارتند از :
• چند ريختي چيست؟
• پيادهسازي متد مجازي (Virtual Method)
• Override كردن متد مجازي
• استفاده از چند ريختي در برنامهها
متد مجازي (Virtual Method)
كد: |
using System; |
مثال 1-9 كلاس DrawingObject را نشان ميدهد. اين كلاس ميتواند بعنوان كلاسي پايه چهت كلاسهاي ديگر در نظر گرفته شود. اين كلاس تنها داراي يك متد با نام Draw() ميباشد. اين متد داراي پيشوند virtual است. وجود كلمه virtual بيان ميدارد كه كلاسهاي مشتق شده از اين كلاس ميتوانند، اين متد را override نماييد و آنرا به طريقه دلخواه پيادهسازي كنند.
using System;
public class Line : DrawingObject
{
public override void Draw()
{
Console.WriteLine(" Line.");
}
}
public class Circle : DrawingObject
{
public override void Draw()
{
Console.WriteLine(" Circle.");
}
}
public class Square : DrawingObject
{
public override void Draw()
{
Console.WriteLine(" Square.");
}
}
در مثال 2-9، سه كلاس ديده ميشود. اين كلاسها از كلاس DrawingObject ارثبري ميكنند. هر يك از اين كلاسها داراي متد Draw() هستند و تمامي آنها داراي پيشوند override ميباشند. وجود كلمه كليدي override قبل از نام متد، اين امكان را فراهم مينمايد تا كلاس، متد كلاس پايه خود را override كرده و آنرا به طرز دلخواه پيادهسازي نمايد. متدهاي override شده بايد داراي نوع و پارامترهاي مشابه متد كلاس پايه باشند.
پيادهسازي چند ريختي
كد: |
using System; |
مثال 3-9 برنامهاي را نشان ميدهد كه از كلاسهاي مثال 1-9 و 2-9 استفاده ميكند. در اين برنامه چند ريختي پيادهسازي شده است. در متد Main() يك آرايه ايجاد شده است. عناصر اين آرايه از نوع DrawingObject تعريف شده است. اين آرايه dObj نامگذاري شده و چهار عضو از نوع DrawingObject را در خود نگه ميدارد.
سپس آرايه dObj تخصيصدهي شده است. به دليل رابطه ارثبري اين عناصر با كلاس DrawingObject، عناصر Line، Circle و Square قابل تخصيص به اين آرايه ميباشند. بدون استفاده از اين قابليت، قابليت ارثبري، براي هر يك از اين عناصر بايد آرايهاي جدا ميساختيد. ارثبري باعث ميشود تا كلاسهاي مشتق شده بتوانند همانند كلاس پايه خود عمل كنند كه اين قابليت باعث صرفهجويي در وقت و هزينه توليد برنامه ميگردد.
پس از تخصيصدهي آرايه، حلقه foreach تك تك عناصر آنرا پيمايش مي كند. درون حلقه foreach متد Draw() براي هر يك از اعضاي آرايه اجرا ميشود. نوع شيء مرجع آرايه dObj، DrawingObject است. چون متد Draw() در هر يك از اين اشياء override ميشوند، از اينرو متد Draw() مربوط به هر يك از اين اشياء اجرا ميشوند. خروجي اين برنامه بصورت زير است :
كد: |
I'm a Line. |
متد override شده Draw() مربوط به هر يك از كلاسهاي مشتق شده در برنامه فوق همانند خروجي اجرا ميشوند. آخرين ط خروجي نيز مربوط به كلاس مجازي Draw() از كلاس DrawingObject است، زيرا آخرين عنصر آرايه شيء DrawingObject است.
خلاصه
در اين درس با مفهوم كلي چند ريختي آشنا شديد. چند ريختي امكاني است كه مخصوص زبانهاي برنامهنويسي شيگرا است و از طريق آن ميتوان براي يك متد موجود در كلاس پايه، چندين پيادهسازي متفاوت در كلاسهاي مشتق شده داشت.
سیامک عباسی
ممنون خوب بود
سیامک عباسی
ممنون..خوب بود