TGViewer
C# Geeks (.NET) C# Geeks (.NET) @csharpgeeks · 548 subscribers
Post #67 96
✨ متدهای انعطاف‌پذیر در #C :
راهنمای کامل params و پارامترهای اختیاری

نوشتن متدهایی که استفاده ازشون راحت و انعطاف‌پذیر باشه، یکی از ویژگی‌های کدنویسی حرفه‌ایه. #C دو تا ابزار قدرتمند برای این کار در اختیار ما میذاره که به ما اجازه میده متدهایی با ورودی‌های متغیر یا پیش‌فرض طراحی کنیم.
بیاید با تمام جزئیات، این دو قابلیت کلیدی رو کالبدشکافی کنیم.

1️⃣params: پذیرش تعداد نامشخص آرگومان

کلمه کلیدی params به شما اجازه میده یه متد بنویسید که بتونه هر تعدادی آرگومان از یک نوع خاص رو به عنوان ورودی قبول کنه. این قابلیت برای متدهای کاربردی مثل توابع محاسباتی یا لاگرها فوق‌العاده‌ست.

جادوی پشت صحنه: کامپایلر #C به صورت خودکار، تمام آرگومان‌های ورودی شما رو که با کاما جدا شدن، میگیره و اون‌ها رو تبدیل به یه آرایه می‌کنه و به متد شما تحویل میده.

✨️قوانین کلیدی params:

قانون 1️⃣: params فقط و فقط می‌تونه برای آخرین پارامتر یک متد استفاده بشه.

قانون 2️⃣: نوع اون پارامتر باید یک آرایه یک‌بعدی باشه.

// با params، این متد هر تعداد int رو قبول می‌کنه
int Sum(params int[] numbers)
{
int total = 0;
// numbers در اینجا یک آرایه معمولی است
for (int i = 0; i < numbers.Length; i++)
{
total += numbers[i];
}
return total;
}

// --- نحوه استفاده ---
// شما می‌تونید هر تعداد آرگومان که خواستید، با کاما جدا کنید
int total1 = Sum(1, 2, 3, 4); // خروجی: 10

// یا حتی خودتون یه آرایه بهش پاس بدید
int[] myNumbers = { 10, 20, 30 };
int total2 = Sum(myNumbers); // خروجی: 60


2️⃣پارامترهای اختیاری: تعیین مقادیر پیش‌فرض

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

void RegisterUser(string username, string country = "Iran") 
{
Console.WriteLine($"User: {username}, Country: {country}");
}

// --- نحوه استفاده ---
RegisterUser("Ali", "Germany"); // User: Ali, Country: Germany
RegisterUser("Sara"); // User: Sara, Country: Iran


نکات فنی و قوانین مهم:

تله کامپایلر! مقدار پیش‌فرض در محل صدا زدن متد (calling side) قرار می‌گیره، نه در خود متد. یعنی RegisterUser("Sara") بعد از کامپایل، به RegisterUser("Sara", "Iran") تبدیل میشه.
نتیجه مهم:


●اگه شما یه کتابخونه بسازید و بعداً مقدار پیش‌فرض رو توش عوض کنید، پروژه‌هایی که از اون کتابخونه استفاده می‌کنن تا وقتی که دوباره کامپایل نشن، از همون مقدار پیش‌فرض قدیمی استفاده خواهند کرد!
●مقدار پیش‌فرض باید یک عبارت ثابت در زمان کامپایل باشه (مثل یک عدد، رشته، null یا default).

●پارامترهای اختیاری نمی‌تونن ref یا out باشن.

●در تعریف متد، پارامترهای اجباری باید قبل از پارامترهای اختیاری بیان.


🤔 حرف حساب و تجربه شما

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

شما از کدوم یکی از این دو قابلیت بیشتر استفاده می‌کنید؟ آیا تا حالا به تله کامپایلری پارامترهای اختیاری برخورد کرده بودید؟

نظراتتون رو کامنت کنید! 👇
[C# Geeks Hangout]

🔖 هشتگ‌ها:
#Parameters
#OptionalParameters
#Params
More from @csharpgeeks
  1. Sep 22, 2026یه مدتی قراره از دنیای NET. فاصله بگیرم، چون وقتشه برم سربازی. راستش نمیدونم این مدت رو چج…
  2. Sep 20, 2026🔥 حالا مشکل اصلی: Alert Storm فرض کن Database از دسترس خارج شده. ۱۰۰ Pod داری. هر Pod می‌…
  3. Sep 20, 2026🚨 طراحی سیستم Monitoring و Alerting در یک سیستم بزرگ فرض کن ساعت ۳ صبح است. سیستم شما با…
  4. Sep 19, 2026#Engineering_Leadership تصمیم نگرفتن هم یک تصمیم است یه چیز عجیب توی تیم‌های مهندسی: گاهی…
  5. Sep 19, 2026☑ چک‌لیست آماده‌سازی تیم، فرایندها و زیرساخت برای توسعه با AI توجه: هیچ چک‌لیستی جهان‌شمول…
  6. Sep 19, 2026📌پایان یک انتظار طولانی: اعتبارسنجی ناهمگام (Async Validation) در NET 11.
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →