إنشاءية محلية المتغير حسب القيمة؟
سؤال
أنا أفهم لماذا يحدث هذا، ولكن ليس تماما. لدي فئة قاعدة مع Shared
(Static
) متغير، أعلن مثل ذلك:
Public Shared myVar As New MyObject(arg1, arg2)
بطريقة فئة مشتقة، أقوم بتعيين متغير محلي مثل ذلك:
Dim myLocalVar As MyObject = myVar
الآن عندما أفعل شيئا مثل myLocalVar.Property1 += value
, ، القيمة في Property1
استمر في الدعوة التالية من هذه الطريقة! أفترض أنني أحصل لماذا سيكون يحدث؛ myVar
يتم تحديدها بالرجوع إليها بدلا من القيمة، لكنني لم أواجه أي شيء مثل هذا من قبل. هل هناك أي طريقة (بخلاف الحلول الخاصة بي والتي هي فقط إنشاء كائن جديد باستخدام قيم الخاصية myVar
) لنصنع او لنبتكر myLocalVar
بالقيمة?
المحلول
عند إنشاء myLocalVar
أنت تقوم بإنشاء مرجع جديد إلى نفس الكائن المشترك. إذا كنت تريد حقا نسخة محلية من المثيل المشترك، فستحتاج إلى إنشاء نسخة حقيقية.
يتم ذلك إرجاع إما استنساخ المثيل أو باستخدام منشئ نسخ على النوع الذي يتيح لك إنشاء نسخة من المثيل. ومع ذلك، هذا ليس بسيطا كما يبدو، نظرا للفروق بين النسخ العميق والضريح والإصدار المستنسخ أو النسخ يمكن أن يخلق مشاكل مماثلة بالنسبة لك إذا كان الخاصية التي تصل إليها هي ببساطة مرجع منفصل ضحل إلى نفس المثيل الذي الخاصية على المثيل الأصلي هو المراجع.
أفضل شيء أقوم به في هذه الحالة هو إنشاء نسخة محلية من الأجزاء فقط من المثيل المشترك الذي تحتاجه، بدلا من نسخ الرسم البياني للكائن بالكامل. هذا يعني إنشاء نسخة محلية من أي نوع Property1
هو واستخدام ذلك.