首页 > 解决方案 > 为什么引用类型变量的行为类似于值类型变量

问题描述

所以,我有一个参考类型是武器:

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 以保存数据。我的问题是,我相信由于武器是参考类型,当我重新分配 currentWeapon 时,oldWeapon 也应该改变。但是由于某种原因,我对 currentWeapon 变量所做的分配不会影响 oldWeapon。是否有某种我不知道的事情发生或我误解了什么?

注意: Weapon 类派生自另一个类,其中至少有一个字符串,但我不确定这是否是问题所在。

标签: c#.netvalue-typereference-type

解决方案


发生了一些你没有误解的事情。您对内存中的对象建立的每个引用都是它自己的引用,它不是对另一个对象引用的引用(它不是链)

//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"

推荐阅读