سربارگذاری متد «Method Overloading» یکی از ویژگیهای مهم و کاربردی در زبانهای برنامهنویسی شیگرا مانند سیشارپ «#C» است که به برنامهنویسان این امکان را میدهد تا متدهایی با نامهای مشابه ولی پارامترهای متفاوت در یک کلاس تعریف کنند. این ویژگی به برنامهنویسان کمک میکند تا عملیات مشابه را برای ورودیهای مختلف با سهولت بیشتری پیادهسازی کنند بدون اینکه نیاز به نامگذاریهای متعدد و پیچیده داشته باشند.
در این مقاله از سری مقالات آموزشی پی استور به بررسی مفهوم سربارگذاری در سی شارپ، نحوه پیادهسازی آن و نکات و محدودیتهای مرتبط با آن پرداخته میشود. همچنین تفاوتهای میان امضای متدها و چگونگی انجام سربارگذاری متد در سیشارپ از طریق تغییر تعداد، نوع یا ترتیب پارامترها مورد بررسی قرار میگیرد.
Overloading در سی شارپ چیست؟
سربارگذاری متد یک ویژگی مهم در برنامهنویسی شیگرا است و به توانایی بازتعریف یک متد در چندین فرم مختلف اشاره دارد. یک کاربر میتواند بارگذاری متد را با تعریف دو یا چند تابع در یک کلاس که نام یکسان دارند، پیادهسازی کند. سیشارپ میتواند متدها را با امضای متدهای متفاوت تشخیص دهد. یعنی متدها میتوانند نام یکسانی داشته باشند اما با پارامترهای مختلف در همان کلاس. این تفاوتها از نظر تعداد، نوع و ترتیب پارامترها است.
نکات مهم در مورد سربارگذاری در سی شارپ
- متدهای بارگذاریشده بر اساس تعداد و نوع پارامترهای ارسالشده به عنوان آرگومان به متدها تمایز مییابند.
- نمیتوانیم بیشتر از یک متد با همان نام، ترتیب و نوع آرگومانها تعریف کنیم. این باعث بروز خطای کامپایلر میشود.
- اگر هر دو متد پارامترهای مشابهی داشته باشند اما انواع بازگشتی مختلفی داشته باشند، خطای زمان کامپایل رخ میدهد.
- بارگذاری متد همچنین به عنوان پلیمورفیسم زمان کامپایل یا ایستا شناخته میشود.
چرا به Overloading در سی شارپ نیاز داریم؟
- خوانایی و سادگی کد: اگر نیاز به انجام یک عمل مشابه با دادههای مختلف باشد، میتوانیم از یک نام مشترک برای متدها استفاده کنیم. این کار موجب کاهش تعداد نامهای متد در برنامه و در نتیجه بهبود خوانایی کد میشود.
- صرفهجویی در زمان توسعه: Overloading به ما این امکان را میدهد که بدون نیاز به ایجاد نامهای مختلف برای متدهای مشابه، برنامه را سریعتر بنویسیم و توسعه دهیم.
- انعطافپذیری: در صورت نیاز به ایجاد رفتارهای مختلف برای یک عمل (مثلاً یک متد برای پردازش اعداد صحیح و دیگری برای اعداد اعشاری)، سربارگذاری در سی شارپ به ما این اجازه را میدهد که متدها را به گونهای ایجاد کنیم که هر کدام با نوعهای مختلف داده کار کنند
- کاهش خطاها: Overloading احتمال خطاهای برنامهنویسی را کاهش داده و قابلیت نگهداری کد را افزایش میدهد.
در نتیجه استفاده از Overloading در سی شارپ کدی خواناتر، انعطافپذیرتر و بهینهتر را ارائه میدهد.
روش های سربارگذاری در سی شارپ
راههای مختلف سربارگذاری متد در سی شارپ میتواند با تغییرات زیر انجام شود:
- تغییر تعداد پارامترها
- تغییر نوع دادههای پارامترها
- تغییر ترتیب پارامترها
۱- تغییر تعداد پارامترها در سی شارپ
ما میتوانیم سربارگذاری در سی شارپ را با تغییر تعداد پارامترهای یک متد انجام دهیم.
مثال: قطعه کد زیر نشاندهنده یک مثال از Overloading در سی شارپ است. در کد زیر، متد Add در کلاس PStore با تعداد پارامترهای مختلف تعریف شده است. هدف از بارگذاری مجدد، ایجاد متدهایی با همان نام اما با تفاوت در تعداد یا نوع پارامترها است. در مثال زیر، متد Add برای جمع دو عدد و سه عدد طراحی شده است.
// Overloading by changing the Number // of parameters using System; class PStore { // adding two integer values. public int Add(int a, int b) { int sum = a + b; return sum; } // adding three integer values. public int Add(int a, int b, int c) { int sum = a + b + c; return sum; } public static void Main(String[] args) { PStore ob = new PStore(); int sum1 = ob.Add(1, 2); Console.WriteLine("add() with two integers"); Console.WriteLine("sum: " + sum1); Console.WriteLine("add() with three integers"); int sum2 = ob.Add(1, 2, 3); Console.WriteLine("sum: " + sum2); } }
خروجی
add() with two integers sum: 3 add() with three integers sum: 6
۲- تغییر نوع داده های پارامترها در سی شارپ
ما میتوانیم سربارگذاری در سی شارپ را با تغییر نوع دادههای پارامترهای یک متد انجام دهیم.
مثال: قطعه کد زیر نمونهای از Overloading در سی شارپ با تغییر ترتیب پارامترها را نشان میدهد. در مثال زیر، دو متد با نام یکسان «Identity» وجود دارد که ترتیب پارامترهای آنها متفاوت است. این بارگذاری مجدد بر اساس ترتیب پارامترها انجام شده است.
// Overloading by changing the Data types // of the parameters using System; class PStore { // adding three integer values. public static int Add(int a, int b, int c) { int sum = a + b + c; return sum; } // adding three double values. public static double Add(double a, double b, double c) { double sum = a + b + c; return sum; } public static void Main(String[] args) { Console.WriteLine("Add() with integer parameter"); int sum2 = Add(1,2,3); Console.WriteLine("sum: " + sum2); Console.WriteLine("Add() with double parameter"); double sum3 = Add(1.0, 2.0, 3.0); Console.WriteLine("sum: " + sum3); } }
خروجی
Add() with integer parameter sum: 6 Add() with double parameter sum: 6
نکته: سربارگذاری در سی شارپ به شما این امکان را میدهد که متدهایی با نام مشابه اما با ترتیب یا تعداد متفاوت از پارامترها ایجاد کنید.
در مثال بالا، ترتیب پارامترها تغییر کرده است، بنابراین برای کامپایلر #C دو متد متفاوت به نظر میرسند و این باعث میشود که بتوانید آنها را به طور مستقل فراخوانی کنید
۳- تغییر ترتیب پارامترها در سی شارپ
اگر متد نام یکسانی داشته باشد ولی ترتیب پارامترها تغییر کند، در این صورت نیز میتوانیم بارگذاری متد را انجام دهیم.
مثال
// Illustration of overloading by changing the // Order of the parameters using System; class Program { public void Identity(String name, int id) { Console.WriteLine("Name1 : " + name + ", " + "Id1 : " + id); } public void Identity(int id, String name) { Console.WriteLine("Name2 : " + name + ", " + "Id2 : " + id); } public static void Main(String[] args) { Program obj = new Program(); // by changing the order obj.Identity("PStore", 1); obj.Identity(2, "blogPStore"); } }
خروجی
Name1 : PStore, Id1 : 1 Name2 : blogPStore, Id2 : 2
مثال: در این مثال، متوجه میشویم که چه اتفاقی میافتد زمانی که امضای متد یکسان باشد و نوع بازگشتی متفاوت باشد.
// Program to show error when method signature // is the same and the return type is different using System; class PStore { // adding two integer value. public int Add(int a, int b) { int sum = a + b; return sum; } // adding three integer value. public double Add(int a, int b) { double sum = a + b + 0.0; return sum; } public static void Main(String[] args) { // Creating Object PStore ob = new PStore(); int sum1 = ob.Add(1, 2); Console.WriteLine("sum of the two integer " "value :" + sum1); int sum2 = ob.Add(1, 2); Console.WriteLine("sum of the three integer " "value :" + sum2); } }
توضیح: کامپایلر یک خطا میدهد زیرا فقط نوع بازگشتی کافی نیست تا کامپایلر بتواند تشخیص دهد که کدام تابع را باید فراخوانی کند. تنها در صورتی که هر دو متد دارای انواع پارامترهای مختلف باشند (بنابراین امضاهای مختلفی دارند)، بارگذاری متد امکانپذیر است.
نتیجهگیری
سربارگذاری در سی شارپ یک ویژگی قدرتمند در برنامهنویسی شیگرا است که به برنامهنویسان این امکان را میدهد تا کدهای خود را با انعطافپذیری بیشتری بنویسند و از پیچیدگیهای اضافی جلوگیری کنند. با استفاده از بارگذاری متد، میتوانیم عملیات مشابه را برای ورودیهای مختلف پیادهسازی کنیم بدون اینکه نیاز به نامگذاریهای متعدد داشته باشیم. این ویژگی از طریق تغییر تعداد، نوع یا ترتیب پارامترهای متد قابل دسترسی است. با این حال، باید توجه داشته باشیم که بارگذاری متد فقط زمانی ممکن است که امضای متدها متفاوت باشد و تغییر فقط در نوع بازگشتی نمیتواند باعث بارگذاری متد شود. در نهایت، استفاده صحیح از بارگذاری متد میتواند به بهبود خوانایی کد، کاهش تکرار و افزایش کارایی برنامه کمک کند.
مقاله خیلی ساده و قابل فهم بود.
این مقاله خیلی روان بود و خیلی سریع توانستم مفهوم سربارگذاری رو در سی شارپ یاد بگیرم.