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

 
ارسال شده در تاریخ 1392/7/22 توسط admin در زمینه آموزش سی شارپ
 
درس نهم _ چند ریختی (Polymorphism)
 
در این درس به بررسی چند ریختی در زبان C# خواهیم پرداخت . اهداف این درس عبارتند از :
 
• چند ریختی چیست؟
• پیاده سازی متد مجازی (Virtual Method)
Override کردن متد مجازی
• استفاده از چند ریختی در برنامه ها
 
یکی دیگر از مفاهیم پای ه ای در شی گرایی، چند ریختی (Polymorphism) است . با استفاده از این ویژگی، می توان برای متد کلاس
مشتق شده پیاده سازی متفاوتی از پیاده سازی متد کلاس پایه ایجاد نمود . این ویژگی در جایی مناسب است که می خواهید گروهی از اشیا ء را به یک آرایه تخصیص دهید و سپس از متد هر یک از آنها را استفاده کن ید . این اشیاء الزاما نباید از یک نوع شی ء باشند . هرچند اگر این اشیاء بواسطه ار ثبری به یکدیگر مرتبت باشند، می توان آنها را بعنوان انواع ارث بری شده به آرایه اضافه نمود . اگر هر یک از این اشیاء دارای متدی با نام مشتری باشند، آنگاه میتوان هر یک از آنها را جداگانه پیاده سازی و استفاده نمود . در این درس با چگونگی انجام این عمل آشنا می گردید .
 
متد مجازی (Virtual Method)
using System;
 
public class DrawingObject
{
public virtual void Draw()
{
Console.WriteLine("I"m just a generic drawing object.");
}
}
 
www.IranProjE.com
مثال 9-1 کلاس DrawingObject را نشان می دهد . این کلاس میتواند بعنوان کلاسی پایه چهت کلاسهای دیگر در نظر گرفته شود .
این کلاس تنها دارای یک متد با نام Draw() می باشد . این متد دارای پیشوند virtual است . وجود کلمه virtual بیان می دارد که کلاسهای مشتق شده از این کلاس می توانند، این متد را override نمایید و آنرا به طریقه دلخواه پیاده سازی کنند .
using System;
 
public class Line : DrawingObject
{
public override void Draw()
{
Console.WriteLine("I"m a Line.");
}
}
public class Circle : DrawingObject
{
public override void Draw()
{
Console.WriteLine("I"m a Circle.");
}
}
public class Square : DrawingObject
{
public override void Draw()
{
Console.WriteLine("I"m a Square.");
}
}
 
www.IranProjE.com
در مثال 9-2 ، سه کلاس دیده می شود . این کلاسها از کلاس DrawingObject ارث بری می کنند . هر یک از این کلاسها دارای متد Draw() هستند و تمامی آنها دارای پیشوند override می باشند . وجود کلمه کلیدی override قبل از نام متد، این امکان را فراهم می نماید تا کلاس، متد کلاس پای ه خود را override کرده و آنرا به طرز دلخواه پیاده سازی نماید . متدهای override شده باید دارای نوع و پارامترهای مشابه متد کلاس پایه باشند .
 
پی ادهسازی چند ریختی
using System;
 
public class DrawDemo
{
public static int Main( )
{
DrawingObject[] dObj = new DrawingObject[4]; dObj[0] = new Line(); dObj[1] = new Circle(); dObj[2] = new Square();
dObj[3] = new DrawingObject();
foreach (DrawingObject drawObj in dObj)
{
drawObj.Draw();
} return 0;
}
}
 
 
www.IranProjE.com
مثال 9-3 برنامه ای را نشان می دهد که از کلاسهای مثال 9-1 و 9-2 استفاده می کند . در این برنامه چند ریختی پی ادهسازی شده است . در متد Main() یک آرایه ایجاد شده است . عناصر این آرایه از نوع DrawingObject تعریف شده است . این آرایه dObj نامگذاری شده و چهار عضو از نوع DrawingObject را در خود نگه می دارد .
 
سپس آرایه dObj تخصیص دهی شده است . به دلیل رابطه ار ثبری این عناصر با کلاس DrawingObject ، عناصر Line ، Circle و
Square قابل تخصیص به این آرایه می باشند . بدون استفاده از این قابلیت، قابلیت ار ث بری، برای هر یک از این عناصر باید آرای ه ای جدا میساختید . ارث بری باعث می شود تا کلاسهای مشتق شده بتوانند همانند کلاس پایه خود عمل کنند که این قابلیت باعث صرف هجویی در وقت و هزینه تولید برنامه میگردد .
 
پس از تخصیص دهی آرایه، حلقه foreach تک تک عناصر آنرا پیمایش می کند . درون حلقه foreach متد Draw() برای هر یک از اعضای آرایه اجرا می شود . نوع شیء مرجع آرایه dObj ، DrawingObject است . چون متد Draw() در هر یک از این اشیاء override می شوند، از اینرو متد Draw() مربوط به هر یک از این اشیاء اجرا می شوند . خروجی این برنامه بصورت زیر است :
I"m a Line. I"m a Circle. I"m a Square.
I"m just a generic drawing object.
متد override شده Draw() مربوط به هر یک از کلاس های مشتق شده در برنامه فوق همانند خروجی اجرا می شوند . آخرین ط خروجی نیز مربوط به کلاس مجازی Draw() از کلاس DrawingObject است، زیرا آخرین عنصر آرایه شیء DrawingObject است .
خلاصه
در این درس با مفهوم کلی چند ریختی آشنا شدی د . چند ریختی امکانی است که مخصوص زبا نهای برنامهنویسی شی گرا است و از طریق آن می توان برای یک متد موجود در کلاس پایه، چندین پی ادهسازی متفاوت در کلاسهای مشتق شده داشت .
Copyright © 2014 icbc.ir