如果我要执行以下操作,您是否认为将对象从一个变量复制到另一个变量或引用指向对象的指针被复制的位置。
myPanel:Panel;
myControl:Control;
myPanel := new Panel;
myControl := myPanel;
如果这不是引用,则使用 myControl 更改任何设置都不会更改 myPanel 设置。我这样说对吗?
myPanel 和 myControl 都是引用。当您进行分配时,您是在复制参考,而不是对参考进行参考。(如果你愿意,可以把它想象成在内存中复制一个地址。)
但是,当您在 myPanel 或 myControl 上调用方法或设置字段时,您将取消引用,即作用于被引用的对象。这种使用 myControl 的“更改设置”(我假设您的意思是设置字段)会在 myPanel 引用的同一对象中更改它们。
在 .net 中,大多数类型——尤其是像 Windows 控件这样复杂的东西——都是引用类型。这意味着变量的值只是对对象的引用,当您分配这些类型的变量时,您只是在复制引用——而不是整个对象。最大的结果是,在您的示例中,更改myControl
会更改myPanel
(反之亦然),因为两者指的是同一个对象。
可以肯定的是,请检查文档。如果对象的类型继承自System.ValueType
(或System.Enum
,它也扩展ValueType
),那么它是一个值类型,并且在您分配时整个事物将被复制。否则它是一个引用类型,你只是在复制引用。