C#是否仅在分配给另一个字段时复制字段数据或引用数据?

Joh*_*nny 3 c# data-members

在将一个字段分配给另一个字段时,C#是仅仅复制数据还是实际创建链接?在这个文章有游戏引擎结构的一个例子.那里的编码器包含其父组件.在C#中,它们只包含父副本,还是引用它?

示例代码:

class World
{
    ...
    public void Update()
    {
        ...
        ent.OnAttach(this);
        ...
    }
    ...
}

class Entity
{
    ...
    public void OnAttach(World world)
    {
        world_ = world;
    }
    ...
}
Run Code Online (Sandbox Code Playgroud)

Entity对象现在可以访问World对象并可以访问它的字段和方法,就像在artice中一样吗?(或者我误解了代码?)

Eil*_*lon 6

因为您的数据类型World被定义为a class而不是a struct,这意味着当您分配该类型的变量时,仅复制对相同数据的引用.

在其他wrods中,无论你是否使用world.SomeProperty = something或者world_.someProperty = something他们将在内存中编辑相同的对象.

如果将数据类型更改为a,struct则将复制整个数据结构,并且您将拥有相同数据的两个副本.

无论您如何定义数据,一旦您拥有对数据的引用,您就可以访问其方法或属性.所以,是的,一旦您的Entity对象具有对world对象的引用,它就可以访问它上面的任何方法或属性(只要它们不是私有的).