传递数组中的类引用

时间:2014-03-05 22:29:29

标签: c# arrays reference

某种程度上我无法处理一整天的简单场景:/

slotTypes = new InventoryItem[] { _Player.EqiupAmulet, _Player.EqiupArmor, _Player.EqiupBelt, _Player.EqiupBoots, _Player.EqiupCloak, _Player.EqiupArmor, _Player.EqiupGauntlets, _Player.EqiupHelmet };

这里要存储对InventoryItem公共类的引用;所以,就像每次我做的事情一样:

InventoryItem _inv = new InventoryItem();
_Player.EqiuipArmor = _inv;

slotTypes [1]和slotTypes [5]现在应该保持对_inv项的引用,但它们没有,它们保持为null; 我觉得我在这里错过了一些合乎逻辑的东西,但是几小时的谷歌搜索并没有帮助我。

我设法使用'ref'在函数中传递引用,但这并没有解决原始问题。

_Player.EqiupArmor定义为 public InventoryItem EqiupArmor  在Player类中;

3 个答案:

答案 0 :(得分:3)

如果您对同一个对象实例有两个不同的引用,并且您将其中一个引用更改为“指向”另一个实例,则这并不意味着另一个引用已更改。另一个引用仍然引用原始实例。

比较一下:

object a = new object();
object b = a;  // a and b are references to the same object

a = "something else";
// now a and b refer different objects; b still refers the original object

答案 1 :(得分:2)

问题是您的数组正在将引用存储到对象中。将_Player.EqiuipArmor分配给 new 对象时,它指向不同的实例,但存储在数组中的引用不会更改。

您可以创建一个采用Player类的类,并将各种属性公开为数组:

public class InvertorySlots
{
    private Player _Player;

    public InventorySlots(Player player)
    { 
    }

    public InventoryItem[] GetItems()
    {
        return new InventoryItem[] { 
              _Player.EqiupAmulet,  
              _Player.EqiupArmor,  
              _Player.EqiupBelt,  
              _Player.EqiupBoots,  
              _Player.EqiupCloak,  
              _Player.EqiupArmor,  
              _Player.EqiupGauntlets,  
              _Player.EqiupHelmet };
    }
}

答案 2 :(得分:1)

Array实际上保存对象的引用。那么看看你的场景中会发生什么:

  1. _Player.EqiuipArmor是空引用
  2. slotTypes[0]复制此内容并成为另一个空引用
  3. _inv引用对象X
  4. _Player.EqiuipArmor引用更改为对象X
  5. 现在_Player.EqiuipArmor引用了X,而slotTypes[0]仍然是空引用。