c# - 为什么引用类型变量的行为类似于值类型变量
问题描述
所以,我有一个参考类型是武器:
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 类派生自另一个类,其中至少有一个字符串,但我不确定这是否是问题所在。
解决方案
发生了一些你没有误解的事情。您对内存中的对象建立的每个引用都是它自己的引用,它不是对另一个对象引用的引用(它不是链)
//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"
推荐阅读
- java - ConcurrentModificationException 未一致抛出
- json - BigQuery - 将结果转换为 JSON 数组
- r - 包裹在函数中的 geom_smooth() 值的子集
- javascript - 为什么当我设置data-backdrop =“false”时,当我点击模态之外时它不能关闭模态?
- c# - xUnit 类构造函数应获取从理论测试方法传递的参数
- javascript - 如何在 SortAlgorithm Visualization 循环内创建间隔(计时器)
- sharepoint - SharePoint 目录/文件
- angular - primeng table:p-table 行分组宽度在可滚动启用时不起作用
- reactjs - 春季安全 + webflux + 反应
- typescript - 我可以将对象传递给 Hyperledger Fabric 交易吗?