c# - C# 只是在分配给另一个字段时复制字段数据还是引用数据?

标签 c# data-members

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

示例代码:

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

class Entity
{
    ...
    public void OnAttach(World world)
    {
        world_ = world;
    }
    ...
}

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

最佳答案

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

换句话说,无论您随后使用 world.SomeProperty = something 还是 world_.someProperty = something,它们都将编辑内存中的同一个对象。

如果您将数据类型更改为struct,那么整个数据结构将被复制,您将拥有相同数据的两个副本。

无论您如何定义数据,一旦您获得了对数据的引用,就可以访问其方法或属性。所以,是的,一旦您的 Entity 对象引用了 world 对象,它就可以访问其中的任何方法或属性(只要它们不是私有(private)的)。

关于c# - C# 只是在分配给另一个字段时复制字段数据还是引用数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2078974/

相关文章:

c++ - 从派生类访问基类的 protected 数据成员

c++ - 使用成员函数初始化数据成员

c# - 尝试连接到azure数据库突然停止工作,抛出异常

c# - System.Windows.Media.Media3D.Matrix3D 的工作原理

c# - 隐式转换为 Func

c++ - 在 C++ 中使用数组仅存储类的数据成员的名称

c# - 如何在 windows 8 facebook 应用程序中邀请好友?

C#:将字符串编码为 utf8 char*

c++ - 封装数据,使 setter 是私有(private)的,而 getter 是公共(public)的

c++ - 如何指定指向数组元素的成员指针?