2017-10-22 31 views
1

我试图访问变量的副本,而不是变量本身。例如,我想让一个敌人在杀死时放下一定数量的骨头。使用变量的副本而不是引用

Enemy1:删除骨头的1

Enemy2:删除骨头的2

而不是创建此项目的骨头“为每一种敌人的,我想有一个包含所有项目一类,和诸如Enemy1和Enemy2之类的敌人可以使用AllItems.Bones来获得Bones掉落。当我想要更改Enemy2.cs中放置对象的数量变量时,会发生此问题。当我做'drop.quantity = 2'时,Enemy1的掉落数量也变为2。以下是有关我正在使用的代码:

//AllItems.cs 
public class AllItems{ 
    public static Item Bones = new Item(); 
} 

//Item.cs 
public class Item{ 
    public int quantity = 1; 
} 

//Enemy1.cs 
public class Enemy1{ 
    Item drop; 
    public Enemy1(){ 
     drop = AllItems.bones; 
    } 
} 

//Enemy2.cs 
public class Enemy2{ 
    Item drop; 
    public Enemy2(){ 
     drop = AllItems.bones; 
     drop.quantity = 2; 
    } 
} 

有没有一种方法来设置Enemy1的和Enemy2的Drop到AllItems.Bones和修改他们的下落,而不会影响其他的?

如果有一个简单的解决方案,我的道歉。我一直在寻找很久,但没有成功。我可以给出任何额外的信息,说明我为什么要以某种方式做某事或者如何根据请求设置某些事情。

谢谢。

+0

为什么所有项目中的Bones都是静态的?改变这一点,看看会发生什么,当你使用'static'时,它只共享该项目的一个实例。 – Parid0kht

回答

2

首先,你可以简单地改变==>在属性:

public static Item Bones => new Item(); 

这将创造新的Item它的访问各一次。

但我宁愿创建一个函数用于创建一组新的骨骼 - 国际海事组织它会更直观,清晰:

public class AllItems{ 
    public static Item CreateNewSetOfBones() 
    { 
     return new Item(); 
    } 
} 

还是短语法:

public class AllItems{ 
    public static Item CreateNewSetOfBones() => new Item(); 
} 
+0

完美,谢谢。 –

1

其实时,您使用static字段或属性,它在任何地方只共享一个实例。相反,我建议你让它变成非静态的。以下应该做的伎俩。

//AllItems.cs 
public class AllItems 
{ 
    public static Item GetBones() 
    { 
     return new Item(); 
    } 
} 

请让我知道万一有任何混淆。

相关问题