如果我实例化一个像:
这样的对象public class Program
{
public static PlayerShip mainShip = new PlayerShip();
}
然后在另一堂课中我做了:
public class RandomEncounters
{
var subShip = new PlayerShip();
public void PlayEncounter()
{
subShip = Program.mainShip;
}
}
我的理解是subShip
和mainShip
现在都在引用“堆”或内存中的同一个对象。这是正确的,这也是一个坏主意吗?
答案 0 :(得分:8)
我的理解是subShip和mainShip现在都在引用“堆”或内存中的相同对象。
如果PlayerShip
是class
,那么是,您将对同一个对象有两个引用。
如果PlayerShip
是struct
,那么编号将创建一个副本并使用该副本。
这是一个坏主意
这既不好也不好,这只是一种工具。
答案 1 :(得分:0)
让我们假设球队是一个阶级。然后你有不同的执行状态:
public class RandomEncounters
{
PlayerShip subShip = new PlayerShip(); //a
现在你需要不同的参考资料。一个引用来自静态对象mainShip
,另一个来自刚刚实例化的对象subShip
。但在你打电话给方法之后:
public void PlayEncounter()
{
subShip = Program.mainShip;
}
}
您引用静态对象mainShip
,因此subShip
和mainShip
都引用同一个对象。
这是一个坏主意吗?
到底是什么?要引用另一个对象?不,这不是一个坏主意,而且经常使用它。
但是,如果你从不使用第一个分配的对象,那么直接分配你的对象(我用a标记了这一行)并不是一个好主意(我无法看到任何用途,也许你使用了{{1}在执行subShip
之前,它已经有意义了。但如果你没有使用它,你直接覆盖旧的引用,这只是浪费RAM空间和执行时间。这不是一个很大的区别,但你也不能把它称为好主意。