请问C#只是场数据复制上分配给另一个字段或引用的数据?
-
21-09-2019 - |
题
目前分配一个场到另一个,莫非C#刚刚超过复制数据,或实际上创建链接? 在这文章有游戏引擎结构的一个例子。编码器有具有组件,包含他们的父母。在C#中,难道他们只包含父副本,或者它们指的是什么?
实施例的代码:
class World
{
...
public void Update()
{
...
ent.OnAttach(this);
...
}
...
}
class Entity
{
...
public void OnAttach(World world)
{
world_ = world;
}
...
}
能否实体对象现在访问世界对象,并有机会获得它的属性和方法,像条每页? (或I误解码?)
解决方案
由于数据类型World
被定义为class
而不是struct
这意味着,当分配该类型的变量,只有参考到相同的数据被复制。
在其它wrods,你是否再使用world.SomeProperty = something
或world_.someProperty = something
它们将在内存中编辑相同的对象。
如果你改变了的数据类型是一个struct
然后整个数据结构将被复制,你将有相同的数据的两个副本。
不管如何定义数据,一旦你必须然后就可以访问它的方法或属性的数据的引用。所以,是的,一旦你的实体对象有世界对象的引用可以访问它的任何方法或属性(只要它们不是私有的)。
其他提示
这取决于World
类型。如果它是一个引用类型(类),复制的参考将指向同一对象,从而改变由新的参考指出将影响原始对象中的对象(不创建新对象)。这是贴在样品的情况下。该字段将简单地指的是相同World
对象。
如果该World
类型值类型,它被复制(及其内容)和将成为一个完全不同的值,改变将不会影响原来的。
作为实体与世界是类(即“引用类型”),那么就要只需要相互引用。如果一个是结构(即,“值类型”),则enite事情会被复制。
您应该看看通过引用传递和由值传递。你的世界对象是一个按引用传递的,所以你传递一个参照位置在内存中的数据这个对象包含所在。
实体可以现在只访问世界对象的公共方法,属性。
不隶属于 StackOverflow