我有一个Tobject A。这个对象是在几个地方链接的(例如B,:= A);我想用C代替A,也表示B现在将是从egal到C。我怎么能说现在A会指向C,所以B也会指向C呢?
发布于 2020-05-01 11:38:46
你希望这样做的唯一方法就是引入一个额外的间接层。目前,A和B是一个地址的两个不同副本的值。您需要同时更改A和B中的值,我认为这是您无法做到的。
您需要做的是将A和B声明为指向TObject的指针,并使它们指向保存对TObject的引用的相同变量。
var
obj: TObject;
A, B: ^TObject;
...
obj := ...
A := @obj;
B := @obj;稍后您可以修改obj,因为A和B都引用相同的TObject变量obj,所以它们都会看到这种变化。
发布于 2020-05-01 12:42:09
你需要改变你的代码设计。你需要一些间接的帮助。您可以使用像David解释的指针这样的指针,也可以使用中间对象;让我们称它为提供程序。提供程序公开对象属性。创建一个提供程序并将其传递给代码的几个部分。提供程序的用户在需要对象时访问对象属性。
在任何时候,您都可以为提供程序分配一个新对象。之后,提供程序的用户将看到新的对象。
该解决方案相对于简单指针的一个好处是,您可以向提供程序添加任何方法和属性,这可能很有用。
发布于 2020-05-01 11:20:47
procedure Test(Sender:TObject);
var
A,B,C : TObject;
D,E : TObject;
begin
A := C;
B := C;
// if you want to keep variable A and B's original values then:
D := A;
E := B;
A := C;
B := C;
end;https://stackoverflow.com/questions/61541122
复制相似问题