آموزش سی شارپ

مباحث پایه سی شارپ

مباحث پیشرفه سی شارپ

دستورات سی شارپ

چند ریختی (Polymorphism) در زبان سی شارپ – آموزش زبان سی شارپ

  • پنجشنبه ۵ اردیبهشت ۱۳۹۸
  • بازدید ۷,۵۴۰ نفر

تصویر csharp-polymorphism_4537 چند ریختی (Polymorphism) در زبان سی شارپ - آموزش زبان سی شارپ

چند ریختی (Polymorphism) در زبان سی شارپ

کلمه Polymorphism به معنای داشتن چندین شکل است. در برنامه نویسی شیء گرا، اغلب به عنوان یک اینترفیس و چندین تابع (one interface, multiple functions) بیان می شود. چند ریختی (Polymorphism) در زبان سی شارپ می تواند به صورت استاتیک و پویا باشد. در چند ریختی استاتیک، وضعیت یک تابع در زمان کامپایل مشخص می شود، ولی در نوع پویا، وضعیت یک تابع در زمان اجرا مشخص می شود.

چند ریختی استاتیک

به مکانیزم پیوند یک تابع با یک شیء در زمان کامپایل، اتصال اولیه یا اتصال استاتیک گفته می شود. در زبان برنامه نویسی C# به منظور پیاده سازی چند ریختی استاتیک دو تکنیک ارائه می شود که عبارت اند از:

  • Function overloading
  • Operator overloading

در مورد Operator overloading در بخش بعدی بحث خواهیم کرد.

Function Overloading در زبان C#

شما می توانید برای یک تابع پیاده سازی های متفاوتی در همان محدوده ای که تعریف شده است، انجام دهید. این پیاده سازی ها همگی یک نام دارند اما تعداد و نوع آرگومان هر کدام از آن ها متفاوت است. نوع بازگشتی یک تابع نمی تواند برای تعریف overload استفاده شود.

برای نمونه در مثال زیر ما سه تابع هم نام به نام print داریم. آرگومانی که تابع print در هر کدام از پیاده سازی ها میگیرد، متفاوت با دیگری است:

امتحان کنید

زمانی که کد بالا توسط کامپایلر زبان سی شارپ اجرا شود، نتیجه زیر را تولید خواهد کرد:

چند ریختی پویا

در زبان برنامه نویسی C# شما می توانید کلاس های abstract ایجاد کنید که به منظور فراهم کردن پیاده سازی یک کلاس partial از یک اینترفیس استفاده می شود. کلاس های abstract شامل متدهای abstract هستند که توسط کلاس مشتق شده، پیاده سازی می شوند.

در زیر قوانین مربوط به کلاس های abstract را مشاهده می کنید:

  • امکان نمونه سازی از یک کلاس abstract وجود ندارد.
  • نمی توان در داخل کلاسی که به صورت abstract نیست، متد abstract تعریف کرد.
  • زمانی که یک کلاس به صورت sealed تعریف می شود، نمی توان از آن ارث بری کرد. بنابراین کلاس های abstract نمی توانند به صورت sealed تعریف شوند.

مثال زیر یک کلاس abstract را نشان می دهد:

امتحان کنید

زمانی که کد بالا کامپایل و اجرا شود، نتیجه زیر را تولید خواهد کرد:

زمانی که بخواهید رفتار یک تابع تعریف شده در کلاس پدر را در کلاس فرزند تغییر دهید، باید آن را به صورت virtual یا مجازی تعریف کنید. توابع virtual می توانند در کلاس های مختلف، پیاده سازی های مختلفی داشته باشند. چند ریختی پویا با استفاده از کلاس های abstract و توابع virtual پیاده سازی می شود.

مثال زیر این موضوع را نشان می دهد:

امتحان کنید

زمانی که کد بالا کامپایل و اجرا شود، نتیجه زیر را تولید خواهد کرد:

ثبت نظر
ریفریش کنید!
نظرات کاربران (۳ مورد)
  1. تصویر آواتار کاربر 0
    سعیدی پنجشنبه , 13 شهریور

    سلام وقت بخیر ضمن تشکر از ارائه آموزش خوب یک نکته اینکه از کلاس abstract نمی شود نمونه سازی کرد فکر کنم اشتباه تاپپی باشه بخش« قوانین مربوط به کلاس های abstract» لطفا اصلاح نمائید. با سپاس

    • تصویر آواتار کاربر 124
      AmRoپنجشنبه , 13 شهریور

      سلام...ممنون که اطلاع دادین...درست شد.

  2. تصویر آواتار کاربر 0
    آراد شنبه , 26 تیر

    بسیار عالی بود! سپاس