Pet*_*sen 2 delphi firemonkey delphi-10-seattle
如果未设置我的对象中的某个属性,我希望能够创建编译器错误/警告.假设我有以下课程:
interface
type
TBarkevent = procedure (Bark : String) of object;
TDog = class
private
FOnBark : TBarkevent;
procedure SetBark(const Value: TBarkevent);
function GetBark: TBarkEvent;
public
procedure Bark;
property OnBark : TBarkEvent read GetBark write SetBark;
constructor Create;
end;
implementation
{ TDog }
procedure TDog.Bark;
begin
if Assigned(OnBark) then
OnBark('Woof!')
end;
constructor TDog.Create;
begin
end;
function TDog.GetBark: TBarkEvent;
begin
Result := FOnBark;
end;
procedure TDog.SetBark(const Value: TBarkevent);
begin
FOnBark := Value;
end;
Run Code Online (Sandbox Code Playgroud)
我TDog在另一个单位中使用这个类,如下所示:
var
Dog : TDog;
begin
Dog := TDog.Create;
Dog.OnBark := DogBark;
Dog.Bark;
Run Code Online (Sandbox Code Playgroud)
现在,一旦Bark()调用过程,OnBark就会触发事件.
我的问题:
是否可以强制指定OnBark属性,以便在未设置事件时发出编译器错误/警告?
将您的班级定义为:
TDog = class
private
FOnBark : TBarkevent;
procedure SetBark(const Value: TBarkevent);
function GetBark: TBarkEvent;
public
procedure Bark;
property OnBark : TBarkEvent read GetBark write SetBark;
constructor Create(Bark : TBarkEvent);
end;
Run Code Online (Sandbox Code Playgroud)
这样,您无法在TDog未指定事件的情况下实例化对象.如果您尝试,您将收到编译器错误.