متدها
متدها
بخشی از آموزش جامع C# و .NET 10
محتوای درس متدها
متدها واحدهای اصلی سازماندهی رفتار در C# هستند. طراحی صحیح Signature، پارامتر، مقدار بازگشتی و مسئولیت هر متد، پایه کد تمیز و قابل تست است.
۱. تعریف و فراخوانی
هر متد نام، نوع بازگشتی و مجموعهای از پارامترها دارد. متد باید یک مسئولیت روشن و نامی متناسب با آن داشته باشد.
مثال
static int Square(int x)=>x*x;
Console.WriteLine(Square(5));در این مثال، مفهوم «تعریف و فراخوانی» در یک قطعه کد مستقل نمایش داده شده است. مقدارها و نامها عمداً ساده انتخاب شدهاند تا رفتار اصلی قابل مشاهده باشد؛ در پروژه واقعی همین الگو با مدل دامنه، اعتبارسنجی و مدیریت خطای متناسب ترکیب میشود.
۲. پارامتر و Return
پارامترها داده ورودی را دریافت میکنند و return نتیجه را به فراخواننده برمیگرداند. void برای متدهای بدون مقدار بازگشتی استفاده میشود.
مثال
static decimal Total(decimal p,int q){return p*q;}
Console.WriteLine(Total(100m,3));در این مثال، مفهوم «پارامتر و Return» در یک قطعه کد مستقل نمایش داده شده است. مقدارها و نامها عمداً ساده انتخاب شدهاند تا رفتار اصلی قابل مشاهده باشد؛ در پروژه واقعی همین الگو با مدل دامنه، اعتبارسنجی و مدیریت خطای متناسب ترکیب میشود.
۳. Optional و Named Arguments
پارامتر اختیاری مقدار پیشفرض دارد و Named Argument خوانایی فراخوانیهایی با چند پارامتر مشابه را افزایش میدهد.
مثال
static string Format(string name,string prefix="Mr")=>$"{prefix} {name}";
Console.WriteLine(Format(name:"Ali"));در این مثال، مفهوم «Optional و Named Arguments» در یک قطعه کد مستقل نمایش داده شده است. مقدارها و نامها عمداً ساده انتخاب شدهاند تا رفتار اصلی قابل مشاهده باشد؛ در پروژه واقعی همین الگو با مدل دامنه، اعتبارسنجی و مدیریت خطای متناسب ترکیب میشود.
۴. Overloading
چند متد میتوانند نام یکسان و Signature متفاوت داشته باشند. Overload باید معنای یک رفتار مشترک را حفظ کند.
مثال
static int Add(int a,int b)=>a+b;
static double Add(double a,double b)=>a+b;
Console.WriteLine(Add(2,3));در این مثال، مفهوم «Overloading» در یک قطعه کد مستقل نمایش داده شده است. مقدارها و نامها عمداً ساده انتخاب شدهاند تا رفتار اصلی قابل مشاهده باشد؛ در پروژه واقعی همین الگو با مدل دامنه، اعتبارسنجی و مدیریت خطای متناسب ترکیب میشود.
۵. ref، out و in
این کلمات نحوه عبور پارامتر را تغییر میدهند. استفاده از آنها باید محدود و آگاهانه باشد زیرا API را پیچیدهتر میکنند.
مثال
static bool Read(string s,out int n)=>int.TryParse(s,out n);
Read("42",out int value);
Console.WriteLine(value);در این مثال، مفهوم «ref، out و in» در یک قطعه کد مستقل نمایش داده شده است. مقدارها و نامها عمداً ساده انتخاب شدهاند تا رفتار اصلی قابل مشاهده باشد؛ در پروژه واقعی همین الگو با مدل دامنه، اعتبارسنجی و مدیریت خطای متناسب ترکیب میشود.
۶. params
params امکان ارسال تعداد متغیری از آرگومانهای همنوع را فراهم میکند.
مثال
static int Sum(params int[] a)=>a.Sum();
Console.WriteLine(Sum(1,2,3));در این مثال، مفهوم «params» در یک قطعه کد مستقل نمایش داده شده است. مقدارها و نامها عمداً ساده انتخاب شدهاند تا رفتار اصلی قابل مشاهده باشد؛ در پروژه واقعی همین الگو با مدل دامنه، اعتبارسنجی و مدیریت خطای متناسب ترکیب میشود.
۷. مثالهای عملی
static decimal CalculateTotal(decimal price, int quantity)
{
return price * quantity;
}
decimal total = CalculateTotal(125_000m, 3);این نمونه عملی چند مفهوم فصل را در کنار هم قرار میدهد و برای مشاهده رفتار واقعی کد قابل اجرا و تغییر است.
static string FormatName(string firstName, string lastName = "")
{
return $"{firstName} {lastName}".Trim();
}این نمونه عملی چند مفهوم فصل را در کنار هم قرار میدهد و برای مشاهده رفتار واقعی کد قابل اجرا و تغییر است.
۸. خطاهای رایج
• متدهای بسیار طولانی با چند مسئولیت
• پارامترهای بیش از حد و مشابه
• استفاده غیرضروری از ref و out
۹. نکات اجرایی
• نامها، Typeها و Methodها را متناسب با مفهوم دامنه و بدون ابهام انتخاب کنید.
• هشدارهای کامپایلر و Nullable را بدون بررسی خاموش نکنید.
• منطق هر بخش را تا حد امکان کوچک، قابل تست و مستقل از I/O غیرضروری نگه دارید.
۱۰. تمرین عملی
مجموعهای از متدها برای محاسبه قیمت نهایی محصول، مالیات و تخفیف طراحی کنید.
۱۱. جمعبندی
در این فصل، مبانی «متدها» با تمرکز بر ساختارهای اصلی زبان، الگوهای صحیح استفاده و خطاهای رایج بررسی شد. تسلط بر این مفاهیم زمینه لازم برای اتصال موضوع به فصلهای بعدی و طراحی کدهای خواناتر، قابل نگهداری و قابل تست را فراهم میکند.