[英]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 };
}
}
數組實際上包含對對象的引用。 因此,請看您的情況如何:
_Player.EqiuipArmor
是空引用 slotTypes[0]
復制並成為另一個空引用 _inv
引用對象X _Player.EqiuipArmor
引用更改為對象X 現在, _Player.EqiuipArmor
引用X,而slotTypes[0]
仍為空引用。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.