तो, मेरे पास एक संदर्भ प्रकार है जो हथियार है:

class Weapon
{
    //Some properties that are both value type and reference type
}

और मेरे पास हथियारों की एक सरणी रखने और वर्तमान हथियार बदलने पर एक घटना को आग लगाने के लिए एक और वर्ग है:

class WeaponManager
{
    Weapon[] weapons;
    Weapon currentWeapon;

    Weapon CurrentWeapon
    {
       get => currentWeapon;
       set
       {
           Weapon oldWeapon = currentWeapon;
           currentWeapon = value;
           OnWeaponChanged?.Invoke(oldWeapon, currentWeapon);
       }
    }
}

मैं OldWeapon वैरिएबल घोषित करता हूं और डेटा को होल्ड करने के लिए इसे currentWeapon को असाइन करता हूं। मेरा सवाल यह है कि मेरा मानना ​​​​है कि चूंकि हथियार एक संदर्भ प्रकार है, जब मैं वर्तमान हथियार को पुन: असाइन करता हूं, तो पुराना हथियार भी बदलना चाहिए। लेकिन किसी कारण से जो असाइनमेंट मैं करंट वेपन वैरिएबल में करता हूं, वह पुराने वेपन को प्रभावित नहीं करता है। क्या कोई ऐसी बात चल रही है जिसके बारे में मुझे जानकारी नहीं है या क्या मैंने कुछ गलत समझा है?

नोट: हथियार वर्ग किसी अन्य वर्ग से प्राप्त कर रहा है जिसमें कम से कम एक स्ट्रिंग है लेकिन मुझे यकीन नहीं है कि यह मुद्दा है या नहीं।

0
HeroOfSkies 16 मार्च 2020, 01:47

1 उत्तर

सबसे बढ़िया उत्तर

कुछ ऐसा हो रहा है जिसे आप गलत नहीं समझ रहे हैं। स्मृति में किसी वस्तु के लिए आपके द्वारा स्थापित प्रत्येक संदर्भ उसका अपना संदर्भ है, यह वस्तु के किसी अन्य संदर्भ का संदर्भ नहीं है (यह एक श्रृंखला नहीं है)

//if you do
currentWeapon = "a sword"
oldWeapon = currentWeapon

//then you have this
oldWeapon --> "a sword" <-- currentWeapon

//you do not have this
oldWeapon  --> currentWeapon --> "a sword"


//if you then do this
currentWeapon = "a gun"

//then you have this
oldWeapon --> "a sword"      currentWeapon --> "a gun"

//you do not have this
oldWeapon  --> currentWeapon --> "a gun"
4
Caius Jard 15 मार्च 2020, 22:57