دسته بندی مقالات
- بیشتر -محصولات
- بیشتر -آخرین مقالات
- بیشتر --
کلمهی کلیدی sealed و object type در سی شارپ
1403/11/02 -
عملگر UNION در پایگاه داده SQL
1403/10/30 -
کلاسهای انتزاعی در سی شارپ
1403/10/30 -
توابع تبدیل کننده در پایگاه داده SQL
1403/10/29 -
متدهای override در سی شارپ
1403/10/28 -
توابع پنجره ای در پایگاه داده SQL
1403/10/28
سربارگذاری متدها در سی شارپ
مفهوم سربارگذاری متدها در سی شارپ
سربارگذاری متدها، به معنی ایجاد چندین متد با نام یکسان ولی پارامترهای متفاوت است.
در این حالت، متدها با توجه به نوع و تعداد پارامترهای ورودی از یکدیگر متمایز میشوند.
این ویژگی به توسعهدهندگان کمک میکند تا عملکردهای مشابه را در قالب متدهایی با نام یکسان اما با پارامترهای ورودی متفاوت تعریف کنند و در زمان فراخوانی، کامپایلر تشخیص میدهد که کدام متد باید اجرا شود.
در سیشارپ، برای سربارگذاری متدها نیاز به تعریف چندین نسخه از یک متد با پارامترهای مختلف دارید. این پارامترها میتوانند از نظر تعداد، نوع، یا ترتیب متفاوت باشند.
مثال
فرض کنید میخواهید یک متد با نام Sum داشته باشید که مجموع دو عدد صحیح را محاسبه کند.
با استفاده از سربارگذاری، میتوانید نسخه دیگری از همین متد را ایجاد کنید که سه عدد یا حتی اعدادی از نوع float را نیز جمع کند.
using System;
namespace MethodOverloadingExample
{
class Program
{
// متدی که دو عدد صحیح را جمع میکند
static int Sum(int a, int b)
{
return a + b;
}
// متدی که سه عدد صحیح را جمع میکند
static int Sum(int a, int b, int c)
{
return a + b + c;
}
// متدی که دو عدد اعشاری را جمع میکند
static float Sum(float a, float b)
{
return a + b;
}
static void Main(string[] args)
{
Console.WriteLine(Sum(5, 3)); // خروجی: 8
Console.WriteLine(Sum(5, 3, 2)); // خروجی: 10
Console.WriteLine(Sum(5.5f, 3.3f)); // خروجی: 8.8
}
}
}
در مثال بالا، ما سه متد مختلف با نام Sum داریم، اما هرکدام پارامترهای متفاوتی دریافت میکنند.
کامپایلر بهصورت خودکار براساس نوع و تعداد پارامترها تصمیم میگیرد که کدام نسخه از متد را فراخوانی کند.
قواعد سربارگذاری متدها در سی شارپ
-
تعداد پارامترها
تعداد پارامترهای ورودی میتواند متفاوت باشد. -
نوع پارامترها
نوع دادهای پارامترها میتواند متفاوت باشد. -
ترتیب پارامترها
ترتیب پارامترها نیز میتواند تغییر کند.
برای یادگیری حرفه ای سربار گزاری متد ها میتونید در دوره پروژه محور سی شارپ ما شرکت کنید تا یک تجربه عالی از یادگیری داشته باشید.
کاربردهای سربارگذاری متدها
سربارگذاری متدها در موارد زیادی کاربرد دارد، از جمله:
- ایجاد متدهایی با نام مشابه برای عملیاتهای مختلف، مثل محاسبه مساحت که ممکن است برای شکلهای مختلفی به کار رود (مربع، مستطیل، دایره).
- راحتتر شدن خواندن و درک کدها، چراکه توسعهدهنده مجبور نیست برای هر عملکرد جدید یک نام متفاوت برای متد انتخاب کند.
- کاهش پیچیدگی کد، زیرا سربارگذاری متدها باعث میشود که همه عملکردهای مشابه با یک نام مشترک فراخوانی شوند.
بازگشت (Recursion) در سی شارپ
بازگشت (Recursion) زمانی رخ میدهد که یک متد، خودش را فراخوانی کند.
این تکنیک معمولاً برای حل مسائل پیچیده با شکستن آنها به مسائل کوچکتر و مشابه استفاده میشود.
بازگشت یک تکنیک برنامهنویسی است که در آن متد برای انجام بخشی از کار به نسخهای دیگر از خودش فراخوانی میکند.
هر فراخوانی جدید به متد، مسئله را یک مرحله سادهتر میکند تا به حالتی برسد که دیگر نیازی به فراخوانی مجدد نباشد.
به این مرحله اصطلاحاً "شرط توقف" (Base Case) گفته میشود. اگر شرط توقف نباشد، برنامه وارد یک حلقه بینهایت میشود.
مثال:
محاسبه فاکتوریل یک عدد با بازگشت
فاکتوریل یک عدد مثبت n برابر است با حاصلضرب تمامی اعداد طبیعی از 1 تا n. فاکتوریل به صورت بازگشتی قابل تعریف است:
اگر n = 1 باشد، فاکتوریل برابر 1 است.
در غیر این صورت، n! = n * (n-1)!
using System;
namespace RecursionExample
{
class Program
{
static int Factorial(int n)
{
// شرط توقف
if (n == 1)
return 1;
else
return n * Factorial(n - 1);
}
static void Main(string[] args)
{
Console.WriteLine(Factorial(5)); // خروجی: 120
}
}
}
در این مثال، متد Factorial با دریافت n، خودش را با مقدار n-1 فراخوانی میکند و این روند تا زمانی که n برابر 1 شود ادامه مییابد.
مزایا و معایب بازگشت متد در سی شارپ
مزایا
-
سادگی کد
برای حل مسائل پیچیده مانند محاسبه فاکتوریل، سری فیبوناچی، و درختهای دودویی، بازگشت سادهتر و خواناتر است. -
حل مسائل تکراری
بازگشت راهی موثر برای حل مسائل تکراری است که به روش تقسیمبهقسمت قابل حل هستند.
🌟 آیا به دنبال یک فرصت عالی برای یادگیری برنامهنویسی هستید؟ 🚀
با دوره آموزشی سیشارپ ما، شما میتوانید مهارتهای خود را به سطح جدیدی ارتقا دهید! این دوره بهطور کامل طراحی شده تا به شما کمک کند تا از مبتدی تا پیشرفته در دنیای برنامهنویسی سیشارپ پیش بروید.
👨🏫 چرا دوره ما را انتخاب کنید؟
- محتوای جامع و عملی: با پروژههای واقعی و تمرینات عملی، یادگیری را به تجربهای جذاب تبدیل کنید.
- مدرس مجرب: از تجربه و دانش مدرس حرفهای بهرهمند شوید که شما را در هر مرحله از یادگیری راهنمایی میکنند.
- پشتیبانی ۲۴/۷: هر زمان که سوالی داشتید، ما در کنار شما خواهیم بود تا به شما کمک کنیم.
- دسترسی مادامالعمر: به محتوای دوره دسترسی دائمی داشته باشید و هر زمان که خواستید، میتوانید به آن مراجعه کنید.
💡 فرصت را از دست ندهید!
بایادگیری سیشارپ، میتوانید در دنیای فناوری اطلاعات به یک متخصص تبدیل شوید و در پروژههای جذاب و چالشبرانگیز شرکت کنید.
همین امروز به جمع یادگیرندگان ما بپیوندید و اولین قدم را به سوی آیندهای روشنتر بردارید!
معایب
-
مصرف زیاد حافظه
هر بار که یک متد خود را فراخوانی میکند، یک نسخه جدید از آن در پشته حافظه ذخیره میشود.
برای مسائل بزرگ، این امر میتواند منجر به خطای کمبود حافظه یا Stack Overflow شود. -
کندی در اجرای برنامه
اجرای بازگشت به دلیل ایجاد نسخههای متعدد از متد کندتر از روشهای تکراری است.
بازگشت در مقابل تکرار
بازگشت و تکرار دو روش برای حل مسائل مشابه هستند.
در بسیاری از مواقع میتوان از هر دو روش استفاده کرد، اما باید توجه داشت که تکرار معمولاً بهینهتر از بازگشت است.
بازگشت وقتی مفیدتر است که کد خواناتر و سادهتر شود.
مثال:
سری فیبوناچی با بازگشت و تکرار
بازگشتی:
static int Fibonacci(int n)
{
if (n <= 1)
return n;
else
return Fibonacci(n - 1) + Fibonacci(n - 2);
}
تکراری:
static int FibonacciIterative(int n)
{
int a = 0, b = 1, c;
if (n == 0) return a;
for (int i = 2; i <= n; i++)
{
c = a + b;
a = b;
b = c;
}
return b;
}
روش تکراری برای سری فیبوناچی از لحاظ مصرف حافظه و کارایی بسیار بهینهتر از روش بازگشتی است.
ترکیب سربارگذاری متدها و بازگشت
گاهی اوقات، میتوان از ترکیب سربارگذاری متدها و بازگشت برای ایجاد کدهایی بسیار خوانا و انعطافپذیر استفاده کرد.
برای مثال، میتوان نسخههای مختلفی از متدهای بازگشتی را با پارامترهای مختلف سربارگذاری کرد تا امکان دریافت دادههای مختلف فراهم شود.
مثال:
محاسبه توان یک عدد با استفاده از بازگشت و سربارگذاری متدها
static int Power(int baseNum, int exponent)
{
// شرط توقف
if (exponent == 0)
return 1;
return baseNum * Power(baseNum, exponent - 1);
}
// نسخه سربارگذاری شده که توان پیشفرض را 2 در نظر میگیرد
static int Power(int baseNum)
{
return Power(baseNum, 2);
}
در این مثال، با استفاده از سربارگذاری، متدی را ایجاد کردیم که بهطور پیشفرض یک عدد را به توان 2 میرساند، و در عین حال امکان محاسبه توانهای مختلف را نیز فراهم کردهایم.
مثال پروژهمحور از سربارگذاری متدها در سی شارپ
در اینجا یک مثال پروژهمحور کوتاه از سربارگذاری متدها در سیشارپ ارائه شده است.
در این پروژه، یک کلاس به نام Logger داریم که پیامهای مختلفی را برای سطوح مختلف لاگ مینویسد.
با استفاده از Method Overloading، میتوانیم پیامها را به روشهای مختلف (مثلاً با سطح، با تاریخ و سطح، یا فقط متن) ثبت کنیم.
مثال پروژهمحور: سیستم لاگینگ با سربارگذاری متدها
using System;
class Logger
{
// سربارگذاری متد Log برای ثبت پیام بدون هیچ اطلاعات اضافی
public void Log(string message)
{
Console.WriteLine($"Message: {message}");
}
// سربارگذاری متد Log برای ثبت پیام با سطح (سطح لاگ)
public void Log(string message, string level)
{
Console.WriteLine($"[{level}] Message: {message}");
}
// سربارگذاری متد Log برای ثبت پیام با سطح و تاریخ
public void Log(string message, string level, DateTime date)
{
Console.WriteLine($"[{date}] [{level}] Message: {message}");
}
}
class Program
{
static void Main()
{
Logger logger = new Logger();
// استفاده از متد Log با پارامترهای مختلف
logger.Log("System started"); // فقط پیام
logger.Log("Connection failed", "Error"); // پیام با سطح لاگ
logger.Log("User login", "Info", DateTime.Now); // پیام با سطح لاگ و تاریخ
}
}
توضیح کد:
Logger کلاس شامل سه نسخه از متد Log است که هر کدام پارامترهای مختلفی دارند:
نسخه اول تنها پیام را میگیرد.
نسخه دوم پیام و سطح لاگ را دریافت میکند.
نسخه سوم پیام، سطح لاگ، و تاریخ و زمان را به عنوان پارامتر میگیرد.
در Main، متد Log با پارامترهای مختلف فراخوانی میشود و سربارگذاری متدها بسته به پارامترها، نسخه مناسب از متد Log را اجرا میکند.
دوره های مرتبط
آموزش برنامه نویسی سی شارپ
زبان شی گرایی حرفه ای سی شارپ یک زبان قدرتمند برای طراحی نرم افزار به شمار میرود.