我一直在搞乱结构。我找了一个这样的例子,但没有找到任何东西。
struct TransformComponent
{
public int X { get; set; }
}
class Foo
{
private TransformComponent _transform;
public ref TransformComponent Transform
{
get { return ref _transform; }
}
}
class Bar
{
Foo testFoo = new Foo;
void TestMethod()
{
testFoo.Transform.X = 5;
}
}
这可以按照您的假设进行编译和工作。
这样做是否有问题,我没有看到?
我感兴趣的原因是,由于TransformComponent是一个值类型而不是一个引用类型,它将被存储在Foo对象旁边的内存中吗?如果它是参考类型,而不是可能在内存中的其他地方?
编辑:
阅读帖子后,我意识到我的问题可能并不清楚。
_transform是否会存储在内存中的Foo对象旁边,因为它是一个Value Type和一个类的字段?
编辑2:
阅读答案,很明显_transform会员被分配到堆上的Foo实例旁边。
如果我没有记错的话,我这样删除一级地址引用是正确的吗?
如果我将TransformComponent切换为引用类型,_transform成员将是对Heap中分配的对象的引用,而不是对Value本身的引用是否正确?
编辑3:
我需要研究如何分配更多东西。感谢所有参与的人,感谢您的时间。
答案 0 :(得分:1)
因为Transform
是类Foo
的一部分,它只存储在Heap上,因为它是用户定义的类型clas的一部分,即引用类型。
当您将其标记为Ref
时,表示您传递的地址不是对象,对其所做的每项更改都将更改存储在给定地址上的值。
如果你在方法中声明了值类型,那么它将被存储在堆栈中,并且该adddress将在ref中传递。
所以,当你将变量标记为Ref
时,它不会在堆上分配内存,它将保持在原来的位置(即在堆/堆栈上)。 Ref
仅告知您正在传递地址,因此对变量所做的更改将反映到地址。