فصل 11 از 40 درس 1 از 1

متدها

متدها

بخشی از آموزش جامع 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 غیرضروری نگه دارید.

۱۰. تمرین عملی

مجموعه‌ای از متدها برای محاسبه قیمت نهایی محصول، مالیات و تخفیف طراحی کنید.

۱۱. جمع‌بندی

در این فصل، مبانی «متدها» با تمرکز بر ساختارهای اصلی زبان، الگوهای صحیح استفاده و خطاهای رایج بررسی شد. تسلط بر این مفاهیم زمینه لازم برای اتصال موضوع به فصل‌های بعدی و طراحی کدهای خواناتر، قابل نگهداری و قابل تست را فراهم می‌کند.