在Simulating class properties in (Win32) Delphi中,有定义“类属性”和类方法的技巧:
unit myObjectUnit;
interface
type
TMyObject = Class
private
class function GetClassInt: integer;
class procedure SetClassInt(const Value: integer);
public
property ClassInt : integer read GetClassInt
write SetClassInt;
end;
implementation
{$WRITEABLECONST ON}
const TMyObject_ClassInt : integer = 0;
{$WRITEABLECONST OFF}
class function TMyObject.GetClassInt: integer;
begin
result := TMyObject_ClassInt;
end;
class procedure TMyObject.SetClassInt(
const Value: integer);
begin
TMyObject_ClassInt := value;
end;
end.
我的代码中只有一个这样的对象,因此 GetClassInt 和 SetClassInt 始终在同一个类型的常量 *TMyObject_ClassInt* 上运行的警告不适用:
procedure TForm1.Button1Click(Sender: TObject);
var
myObject : TMyObject;
begin
myObject.ClassInt := 2005;
end;
procedure TForm1.Button2Click(Sender: TObject);
var
myObject : TMyObject;
begin
ShowMessage(IntToStr(myObject.ClassInt));
end;
(这说明了警告:单击 1,然后单击 2,消息显示 2005,而不是 0)。
尽管如此,这段代码还是有点腥。我可以期待问题(除了上面的警告)吗?有没有更好的办法?.
顺便说一句,我不是在谈论暴力 $WRITEABLECONST OFF - 而不是返回到以前的状态。可以通过以下方式规避:
{$IFOPT J-}
{$DEFINE WC_WAS_OFF}
{$ENDIF}
{$WRITEABLECONST ON}
const TMyObject_ClassInt : integer = 0;
{$IFDEF WC_WAS_OFF}
{$WRITEABLECONST OFF}
{$ENDIF}