البرمجة

تأثير استخدام out parameter في C#

السبب في أن التغيير في كائن الموظف (employee) ينعكس على القيمة في القاموس (dictionary) هو أنه عندما تستخدم out parameter في TryGetValue، فإنك تمرر مرجعًا (reference) إلى كائن الموظف، وليس نسخة منه. بمعنى آخر، تمرر المتغير employee بشكل مرجعي، لذا عندما تقوم بتعديل خصائص الموظف، فإنك تعدل الكائن الفعلي الذي يشير إليه المتغير في القاموس.

لتجنب هذا التأثير الجانبي، يمكنك إنشاء نسخة جديدة من الموظف وتعيين قيمتها بنفس القيم من الموظف في القاموس، وبذلك لن يتأثر الموظف الذي يحتويه القاموس بالتغييرات التي تجري على الموظف الجديد.

الشيء المهم هنا هو أن الـ out parameter يسمح بتعديل الكائن الموجود بالفعل، وهذا يمكن أن يكون مفيدًا في بعض الحالات، لكن يجب أن تكون حذرًا عند استخدامه لتجنب التأثيرات الجانبية غير المرغوب فيها.

المزيد من المعلومات

بالطبع! في الكود الذي قدمته، تستخدم TryGetValue للبحث عن قيمة الموظف المرتبطة بمفتاح (Id) محدد في القاموس dictEmployees. إذا وُجِدَت القيمة، يتم تعيين قيمة الموظف في المتغير employee الممرر كمعامل out. إذا تم تعديل هذا الموظف في أي مكان آخر في الشيفرة، سينعكس التغيير على الكائن المحفوظ في القاموس أيضًا. هذا سلوك متوقع لأنك تعمل على نفس الكائن والمرجع له.

لتجنب هذا السلوك إذا كنت لا تريد تأثير التغييرات في الموظف على الكائن المحفوظ في القاموس، يمكنك إنشاء نسخة جديدة من الموظف وتعيين قيمها بنفس قيم الموظف في القاموس. وبذلك سيكون لديك نسخة مستقلة تمامًا من الموظف تعمل عليها دون أن تؤثر على القيم المحفوظة في القاموس.

مقالات ذات صلة

زر الذهاب إلى الأعلى
إغلاق

أنت تستخدم إضافة Adblock

يرجى تعطيل مانع الإعلانات حيث أن موقعنا غير مزعج ولا بأس من عرض الأعلانات لك فهي تعتبر كمصدر دخل لنا و دعم مقدم منك لنا لنستمر في تقديم المحتوى المناسب و المفيد لك فلا تبخل بدعمنا عزيزي الزائر