سؤال

أنا أفهم لماذا يحدث هذا، ولكن ليس تماما. لدي فئة قاعدة مع Shared (Static) متغير، أعلن مثل ذلك:

Public Shared myVar As New MyObject(arg1, arg2)

بطريقة فئة مشتقة، أقوم بتعيين متغير محلي مثل ذلك:

Dim myLocalVar As MyObject = myVar

الآن عندما أفعل شيئا مثل myLocalVar.Property1 += value, ، القيمة في Property1 استمر في الدعوة التالية من هذه الطريقة! أفترض أنني أحصل لماذا سيكون يحدث؛ myVar يتم تحديدها بالرجوع إليها بدلا من القيمة، لكنني لم أواجه أي شيء مثل هذا من قبل. هل هناك أي طريقة (بخلاف الحلول الخاصة بي والتي هي فقط إنشاء كائن جديد باستخدام قيم الخاصية myVar) لنصنع او لنبتكر myLocalVar بالقيمة?

هل كانت مفيدة؟

المحلول

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

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

أفضل شيء أقوم به في هذه الحالة هو إنشاء نسخة محلية من الأجزاء فقط من المثيل المشترك الذي تحتاجه، بدلا من نسخ الرسم البياني للكائن بالكامل. هذا يعني إنشاء نسخة محلية من أي نوع Property1 هو واستخدام ذلك.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top