来自C#背景我正在努力学习Delphi。 我在表单中遇到Access违规,按下创建TLight实例的按钮。 无论我在哪里尝试访问我的私人FState,我都会遇到访问冲突。
我错过了什么?
unit Light;
interface
uses sysUtils;
type
TLightStates = (Red, Orange, Green);
type
TLight = class
private
Fstate : TLightStates;
published
Constructor Create(); overload;
procedure SetState(const Value: TLightStates);
Property State : TLightStates
read Fstate
write SetState;
end;
implementation
{ TLight }
constructor TLight.Create;
begin
Fstate := TLightStates.Red;
end;
procedure TLight.SetState(const Value: TLightStates);
begin
Fstate := Value;
end;
end.
答案 0 :(得分:3)
您是否在测试代码中创建了一个设置了属性State的对象?
var
x: TLight;
begin
x := TLight.Create;
x.Light := Orange;
x.Free;
end;
查看代码,这应该可以正常工作。
另一件事:你为什么用重载来指定构造函数:你从TObject派生而且它没有虚构造函数,所以不应该在这里指定重载。
答案 1 :(得分:2)
关于上述代码的一条评论:
var
x: TLight;
begin
x := TLight.Create;
TRY
x.Light := Orange;
FINALLY
x.Free;
END;
end;
“try”和“finally”(上面使用大写字母表示可读性)确保释放x。 正如您现在所知,Delphi中没有垃圾收集,因此释放您的对象是必须 ......
关于您的初始代码: 您的创建应该是虚拟和公共的。 次要评论:
HTH, kuzkot