C# 继承对象和基础对象是否存储在2个内存空间/块中?

C# 继承对象和基础对象是否存储在2个内存空间/块中?,c#,oop,inheritance,C#,Oop,Inheritance,我有类BaseObject和继承对象继承自BaseObject 在BaseObject中,我有字段“public int Id”。 在继承对象中,我有字段“public new long Id” 问题: 创建继承对象的新实例时,继承对象和基础对象是否存储在2个内存空间/块中 更具体地说,我使用地址0x001存储BaseObject,使用地址0x100存储InheritedObject。 并且InheritedObject使用地址0x001引用BaseObject。假设c#,则会创建两个离散字段。

我有类BaseObject和继承对象继承自BaseObject

在BaseObject中,我有字段“public int Id”。 在继承对象中,我有字段“public new long Id”

问题: 创建继承对象的新实例时,继承对象和基础对象是否存储在2个内存空间/块中

更具体地说,我使用地址0x001存储BaseObject,使用地址0x100存储InheritedObject。 并且InheritedObject使用地址0x001引用BaseObject。

假设c#,则会创建两个离散字段。因此将分配两个内存空间

添加
new
修饰符时,会对基类的字段进行阴影处理。因此,当您使用派生类型访问字段时,您将从
InheritedObject
获取值,要获取
BaseObject.Id
的值,您可以通过基本对象类型访问它


注意:在派生类中进行阴影处理时,您也可以更改数据类型,因此显然使用了单独的内存位置。

如果您询问对象及其子对象是否存储在一起,则是-对象的所有继承子对象都存储在其自身中。它们之间没有指针或引用。如果你问其他问题,你需要进一步澄清。@molbdnilo:我关心的是每个对象是否有2个内存空间?它们可以彼此相邻,或者继承对象包含基本对象内存空间?如果我不使用新修改器(例如,我使用覆盖修改器),我是否有2个内存空间用于2个ID?我关心的是每个对象是否有2个内存空间?它们可以彼此相邻,或者继承对象包含BaseObject内存空间?@VuNguyen您不能对字段使用覆盖修饰符。对不起,我的意思是,如果我使用属性,例如公共覆盖int Id{get;set;}@VuNguyen Yes,若像这样使用,基类将有一个单独的支持字段,派生类也将有一个单独的支持字段。因此将分配两个内存位置。下载IL Spy或reflector并检查反编译的编译代码?如果不是