如果未设置属性,则生成编译器错误

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属性,以便在未设置事件时发出编译器错误/警告?

Hea*_*are 5

将您的班级定义为:

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未指定事件的情况下实例化对象.如果您尝试,您将收到编译器错误.