在我的工作场所,我们有一些代码,其中
我认为这个代码之所以能够工作,是因为
我创建了以下测试类:
然而,编译此代码会抛出一个错误:
class function
引用Self
,实际上创建了一个潜在的访问冲突,如果对象没有被初始化。在类方法中,Self
的含义是否会改变,以便引用类而不是对象?我认为这个代码之所以能够工作,是因为
Self
指的是另一个class function
而不是常规方法。我创建了以下测试类:
constructor TTest.Create;
begin
FTest := 'Hej';
end;
procedure TTest.GoTest;
begin
ShowMessage(FTest);
end;
class procedure TTest.Test;
begin
Self.GoTest;
end;
然而,编译此代码会抛出一个错误:
[dcc32 Error] Unit1.pas(51): E2076 This form of method call only allowed for class methods or constructor
我还尝试直接引用FTest进行测试,但是出现了另一个错误:
[dcc32 Error] Unit1.pas(51): E2124 Instance member 'FTest' inaccessible here
我想知道,在类方法中是否存在可能导致Self
不安全的情况。
我知道,引用全局对象并假设它们一直存在是不好的。
Self
可能会引起混淆,或者如果该方法移动到另一个类中,可能会改变其含义。 - SvipSelf
有其作用的场景。 - Svip