繁体   English   中英

通过数组中的类引用

[英]pass class reference in array

不知何故,我整天都无法应付这种简单的情况:/

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项的引用,但它们不保留,它们保持为空; 我觉得我在这里缺少合乎逻辑的东西,但是数小时的谷歌搜索并没有帮助我。

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

_Player.EqiupArmor定义为Player类内部的public InventoryItem EqiupArmor

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

比较一下:

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

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

您可以创建一个接受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 };
    }
}

数组实际上包含对对象的引用。 因此,请看您的情况如何:

  1. _Player.EqiuipArmor是空引用
  2. slotTypes[0]复制并成为另一个空引用
  3. _inv引用对象X
  4. _Player.EqiuipArmor引用更改为对象X

现在, _Player.EqiuipArmor引用X,而slotTypes[0]仍为空引用。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM