这是复制还是引用?



如果我要做以下操作,您认为这是将对象从一个变量复制到另一个变量还是引用对象指针的复制位置?

myPanel:Panel;
myControl:Control;
myPanel := new Panel;
myControl := myPanel;

如果这不是引用,那么改变myControl的任何设置都不会改变myPanel设置。我这么说对吗?

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

为了确保,请查看文档。如果对象的类型继承自System.ValueType(或者System.Enum,它也扩展了ValueType),那么它就是一个值类型,当你赋值的时候,整个东西都会被复制。否则它就是引用类型,你只是在复制引用

myPanel和myControl都是引用。当你赋值的时候,你是在复制一个引用,而不是一个引用到另一个引用。(如果你愿意,可以把它看作是在内存中复制一个地址。)

然而,当你在myPanel或myControl上调用方法或设置字段时,你是在取消引用,即作用于被引用的对象。这个"改变设置"与myControl(我假设你的意思是设置字段)改变它们在同一个对象由myppanel引用。

相关内容

  • 没有找到相关文章

最新更新