1. إيه هو الـ params
؟
هو keyword في C# بيخليك تبعت أي عدد من الـ arguments من نفس النوع لـ method واحدة، من غير ما تحدد عددهم من الأول.
يعني بدل ما تكتب 10 parameters، تقول: “يا Method خد اللي انت عايزه وكمل”.
2. ليه نستخدمه؟
- علشان تكتب code أكتر نظافة.
- علشان تتجنب إنك تعمل overloads كتيرة لنفس method.
- لو عندك method بتتعامل مع عدد parameters مش معروف (مثلاً: جمع أرقام، دمج كلام، إلخ).
3. طريقة الكتابة:
لازم تكون عبارة عن Cs Arrays
// Should be array
public int Sum(params int[] numbers)
{
int total = 0;
foreach (int num in numbers)
{
total += num;
}
return total;
}
4. إزاي تستدعيه؟
Sum(1, 2, 3); // 6
Sum(10, 20, 30, 40); // 100
Sum(5); // 5
Sum(); // 0 (لو ال array فاضية)
لو مكنتش استخدمت params:
Sum(new int[] {1, 2, 3}); // نفس النتيجة، لكن code أطول
5. قواعد مهمة:
- الـ parameter اللي معاه
params
لازم يكون آخر حاجة في الـ parameters. - مينفعش يكون فيه أكتر من
params
في method واحدة. - الـ
params
مش بتشتغل معref
أوout
. اللي اتكلمنا عنهم في الـ Cs Pass parameters - النوع بتاعه لازم يكون array (مثلاً:
int[]
,string[]
).
6. أمثلة تانية:
مثال مع strings:
public string MergeWords(params string[] words)
{
return string.Join(" ", words);
}
// الاستخدام:
MergeWords("I", "❤️", "C#"); // "I ❤️ C#"
مثال مع mixing parameters:
public void SendEmail(string subject, params string[] recipients)
{
foreach (string email in recipients)
{
Console.WriteLine($"Sending '{subject}' to {email}");
}
}
// الاستخدام:
SendEmail("Hello", "ali@example.com", "mohamed@test.com");
7. إيه الـ مشاكل أو Limitations؟
- لو الـ arguments كتير جدًا، ممكن يسبب performance issues (لإن الـ array بيتعمل لها allocate في الـ heap).
- مينفعش تستخدم
params
مع method overloading لو فيه methods تانية بنفس الاسم وعدد parameters متشابه. Overloading - مش كل الـ types ممكن تستخدمها (مثلاً:
List<int>
مش هتشتغل، لكنint[]
هتشتغل).
8. إزاي تتجنب المشاكل دي؟
- لو عايز parameters من أنواع مختلفة، استخدم overloading.
- لو عارف عدد الـ arguments مسبقًا، استخدم optional parameters بدلًا منه.
- لو الـ performance مهمة، استخدم
Span<T>
أوReadOnlySpan<T>
في حالات معينة.
9. أمثلة واقعية:
- الـ
Console.WriteLine()
نفسها بتستخدمparams
عشان تقبل أي عدد من الـ arguments للـ formatting:Console.WriteLine("Name: {0}, Age: {1}", "Ali", 25);
10. لو خلاصة الكلام:
- الـ
params
ده سهل حياتك لما بتكون عايز تبعت بيانات كتيرة من نفس النوع من غير ما تتعب في كتابة arrays. - استخدمه بحكمة علشان متخليش الـ code بتاعك يبقى “بطيء” أو صعب القراءة.
الكلمة الأخيرة:
“الـ params زي العسل.. لو زودته كتير هتندم، لكن لو استخدمته بالظبط هتستمتع بيه 😉”