Avatar ·

ما الفرق بين الكلمات المفتاحية ref و out في لغة C#؟

مرحباً بالجميع! بدأت في تعلم لغة C# وواجهت الكلمات المفتاحية `ref` و `out`. أفهم أن كلاهما يسمح بتعديل المتغيرات المُمررة داخل الدالة، لكن الفرق بينهما ليس واضحاً تماماً بالنسبة لي. إليك مثال كتبته: ```csharp public void TestRef(ref int x) { x = x * 2; } public void TestOut(out int x) { x = 10; } static void Main() { int a = 5; int b; // خطأ: متغير غير مهيأ لـ out TestRef(ref a); Console.WriteLine(a); // يطبع 10 TestOut(out b); Console.WriteLine(b); // يطبع 10 } ``` لاحظت أنه مع `out` لا يمكنني تمرير متغير غير مهيأ دون خطأ، لكنني أقوم بتهيئته داخل الدالة. أما مع `ref` فيجب علي تهيئة المتغير قبل الاستدعاء. لكن هذا ليس الفرق الوحيد، أنا متأكد. هل هناك أي تفاصيل أخرى؟ مثلاً، كيف يؤثر هذا على الأداء، أو هل هناك قواعد حول متى نستخدم أياً منهما؟ سأكون ممتناً لشرح مفصل مع أمثلة.