这是复制还是引用?

时间:2013-03-05 15:02:23

标签: .net winforms oxygene

如果我要执行以下操作,您是否认为将对象从一个变量复制到另一个变量或引用复制指向对象的指针。

myPanel:Panel;
myControl:Control;

myPanel := new Panel;

myControl := myPanel;

如果这不是引用,则使用myControl更改任何设置将不会更改myPanel设置。我说的是对的吗?

2 个答案:

答案 0 :(得分:1)

myPanel和myControl都是引用。当您进行作业时,您正在复制参考,而不是参考参考。 (如果你愿意的话,可以考虑将其复制到内存中。)

但是,当您在myPanel或myControl上调用方法或设置字段时,您将取消引用,即对引用的对象执行操作。这"更改设置" with myControl(我假设你的意思是设置字段)在myPanel引用的同一个对象中更改它们。

答案 1 :(得分:1)

在.net中,大多数类型 - 特别是像Windows控件一样复杂的东西 - 都是引用类型。这意味着变量的值只是对对象的引用,而您只是在分配这些类型的变量时复制引用 - 而不是整个对象。最重要的结果是,在您的示例中,更改myControl会更改myPanel(反之亦然),因为这两个引用同一个对象。

要确定,请查看文档。如果对象的类型继承自System.ValueType(或System.Enum,也扩展ValueType),那么它是一个值类型,并且在分配时将复制整个事物。否则它是一个引用类型,你只是复制引用。