الدوال هي functions معرّفة داخل class. يدعم C# ميزات معاملات غنية — معاملات اختيارية/مسماة، معدّلات ref/out/in، مصفوفات params — و (دوال متعددة بنفس الاسم لكن بمعاملات مختلفة).
public int Add(int a, int b) => a + b; // expression-bodied (concise)
public string Greet(string name, string greeting = "Hello") // default parameter
{
return $"{greeting}, {name}";
}
Greet("Ann"); // "Hello, Ann"
Greet("Ann", greeting: "Hi"); // named argument
تحدّد الدوال نوع الإرجاع والاسم والمعاملات. المعاملات الافتراضية تجعل الحجج اختيارية، والمعاملات المسماة تسمح بالمرور بالاسم (أوضح، يمكن تخطي الاختيارية).
// ref — pass by reference (method can modify the caller's variable)
void Increment(ref int x) { x++; }
int n = 5; Increment(ref n); // n is now 6
// out — for returning multiple values (must be assigned in the method)
bool TryParse(string s, out int result) { result = ...; return true; }
if (int.TryParse("42", out int value)) { } // the common TryX pattern
// in — pass by reference but READ-ONLY (performance for large structs)
void Process(in LargeStruct data) { }
out مستخدمة على نطاق واسع في نمط TryParse (إرجاع علم نجاح بالإضافة إلى النتيجة بأمان)؛ ref تسمح بتعديل متغير المستدعي؛ in تمرر structs كبيرة بكفاءة بدون نسخ.
// params — variable number of arguments
int Sum(params int[] numbers) => numbers.Sum();
Sum(1, 2, 3, 4); // any number
// OVERLOADING — same name, different parameters
void Print(int x) { }
void Print(string s) { }
void Print(int x, int y) { }
Print(5); // calls the int version — resolved by argument types
الحمل الزائد يسمح لدوال متعددة بمشاركة اسم، مميزة بأنواع/عدد المعاملات — يختار المترجم الدالة المطابقة. params تقبل عدداً متغيراً من الحجج.
الدوال هي اللبنات الأساسية للسلوك في C#، والفهم العميق لميزات المعاملات الغنية مهم لكتابة كود مرن وتعبيري.
معرفة كيفية تعريف الدوال (بما فيها الصيغة الموجزة expression-bodied)، استخدام المعاملات الافتراضية والمسماة (للحجج الاختيارية والاستدعاءات الواضحة)، وتطبيق الحمل الزائد للدوال (نفس الاسم، معاملات مختلفة — لواجهات برمجية بديهية تتعامل مع أنواع حجج مختلفة) هي معرفة يومية.
معدّلات المعاملات مهمة بشكل خاص للفهم: out مستخدمة على نطاق واسع في نمط TryParse الموجود في كل مكان (int.TryParse(s, out var result) — إرجاع علم نجاح والنتيجة بأمان بدون استثناءات، نمط شائع وأساسي في C#)، ref تمكّن من تعديل متغير المستدعي، و**in** تمرر structs كبيرة بالمرجع للأداء.
فهم هذه المفاهيم — الدوال، ميزات المعاملات (اختيارية/مسماة/params)، الحمل الزائد للواجهات البرمجية المرنة، ومعدّلات ref/out/in (خاصة idiom TryParse القائم على out) — أساسي لكتابة دوال C# واستخدام عدد كبير من واجهات برمجية .NET التي تعتمد على هذه الميزات.
بما أن الدوال ومعاملتها أساسية لكل كود C#، وبما أن ميزات مثل الحمل الزائد والمعاملات الاختيارية ونمط TryX تظهر باستمرار، إتقانها هو معرفة أساسية وضرورية للتطوير الفعال في C#.