簡體   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