تفاوت کلیدی - Overriding در مقابل Overloading در C
تفاوت اصلی بین overriding و overloading در سی شارپ این است که اتصال فراخوانی متد overrid شده به تعریف آن در زمان اجرا اتفاق می افتد در حالی که اتصال فراخوانی متد سربارگذاری شده به تعریف آن در زمان کامپایل اتفاق می افتد.
C یک زبان برنامه نویسی همه منظوره است که توسط مایکروسافت توسعه یافته است. مزیت اصلی سی شارپ این است که از برنامه نویسی شی گرا (OOP) پشتیبانی می کند. یکی از ستون های OOP چند شکلی است. به یک شی میدهد تا چندین رفتار داشته باشد. دو نوع در پلی مورفیسم وجود دارد که به نام های overriding و overloading شناخته می شوند. در این مقاله تفاوت بین overriding و overloading در سی شارپ بحث می شود.
Overriding در C چیست؟
مفهوم مهم دیگری در OOP وجود دارد وراثت است. این برای استفاده از ویژگی ها و متدهای کلاس موجود است. قابلیت استفاده مجدد کد را بهبود می بخشد. کلاس موجود کلاس پایه است و کلاس جدید به عنوان کلاس مشتق شده شناخته می شود. در غلبه بر چندشکلی، باید یک کلاس پایه و یک کلاس مشتق وجود داشته باشد. اتصال فراخوانی متد لغو شده به تعریف در زمان اجرا اتفاق می افتد. یک مثال به شرح زیر است.
شکل 01: برنامه C با Overriding
طبق برنامه بالا، کلاس Shape کلاس پایه است و شامل متد نمایش است. کلاس Rectangle و Triangle کلاس های مشتق شده هستند. این کلاس های مشتق شده نیز دارای روش نمایش مشابه با پیاده سازی های خود هستند.
ابتدا متغیر مرجع obj ایجاد می شود. به شی Shape اشاره می کند. بنابراین، متد نمایش از کلاس Shape اجرا خواهد شد. سپس، متغیر مرجع به شی Rectangle اشاره می کند. بنابراین، متد نمایش کلاس Rectangle اجرا می شود. در نهایت، متغیر مرجع به شی Triangle اشاره می کند. بنابراین، متد نمایش کلاس Triangle اجرا می شود. روش نمایش کلاس پایه توسط روش های نمایش کلاس های مشتق شده لغو می شود.
روش اجرا در زمان اجرا تعیین می شود. کلاس Shape با کلمه کلیدی "مجازی" نوشته می شود. کلاس های Rectangle و Triangle با کلمه کلیدی “override” نوشته می شوند. اگر از این کلمات کلیدی استفاده نشود، خروجی محتوای روش نمایش کلاس Shape را برای همه چاپ میکند.
Overloading در C چیست؟
در بارگذاری بیش از حد، چندین روش دارای نام یکسان اما با پارامترهای متفاوت هستند. پارامترها می توانند انواع مختلفی داشته باشند. متدها همچنین می توانند تعداد پارامترهای متفاوتی داشته باشند.اضافه بار روش در همان کلاس اتفاق می افتد. اتصال متدهای اضافه بار به تعریف در زمان کامپایل اتفاق می افتد. به برنامه سی شارپ زیر مراجعه کنید.
شکل 02: برنامه C با بارگذاری اضافه
طبق برنامه بالا، کلاس A دارای دو متد به همین نام به نام sum است. آنها انواع مختلفی از پارامترها را دارند. در برنامه اصلی، یک شی از A ایجاد می شود. مجموع (2، 3) روش جمع را با اعداد صحیح فراخوانی می کند. مجموع (5.1، 7.94) روش جمع را با مقادیر دوگانه فراخوانی می کند. هر دو روش دارای نام یکسان و تعداد پارامترهای یکسانی هستند. اما انواع پارامترها متفاوت است. روش مورد نیاز بر این اساس فراخوانی می شود. همچنین اگر نام روش و نوع پارامتر یکسان باشد اما تعداد پارامترها متفاوت باشد، بارگذاری بیش از حد ممکن است رخ دهد.
شباهت بین Overriding و Overloading در C چیست؟
هر دو Overriding و Overloading در C انواعی از چندشکلی هستند
تفاوت بین Overriding و Overloading در C چیست؟
Overriding در مقابل Overloading در C |
|
Overriding در سی شارپ ارائه یک پیاده سازی خاص در یک متد کلاس مشتق شده برای متدی است که از قبل در کلاس پایه وجود دارد. | Overloading در سی شارپ ایجاد چندین متد با یک نام با پیاده سازی های مختلف است. |
پارامترها | |
در C Overriding، متدها نام یکسان، انواع پارامترهای مشابه و تعداد پارامترهای یکسانی دارند. | در C Overloading، متدها نام یکسانی دارند اما تعداد پارامترهای متفاوت یا نوع متفاوتی از پارامترها دارند. |
رویداد | |
در C، overriding در کلاس پایه و کلاس مشتق شده رخ می دهد. | در C، بارگذاری بیش از حد در همان کلاس اتفاق می افتد. |
زمان صحافی | |
پیوند فراخوانی متد لغو شده به تعریف آن در زمان اجرا اتفاق می افتد. | پیوند فراخوانی متد بارگذاری شده به تعریف آن در زمان کامپایل اتفاق می افتد. |
مترادف | |
Overriding به عنوان چندشکلی زمان اجرا، پلی مورفیسم پویا یا اتصال دیرهنگام نامیده می شود. | بارگذاری بیش از حد به عنوان چندشکلی زمان کامپایل، چندشکلی ایستا یا اتصال اولیه نامیده می شود. |
خلاصه - Overriding در مقابل Overloading در C
Overriding و Overloading دو نوع چندشکلی هستند. تفاوت بین overriding و overloading در سی شارپ این است که اتصال فراخوانی متد overrid شده به تعریف آن در زمان اجرا اتفاق میافتد در حالی که اتصال فراخوانی متد overloaded به تعریف آن در زمان کامپایل اتفاق میافتد.