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

标签 delphi firemonkey delphi-10-seattle

如果我的对象中的某个属性未设置,我希望能够创建编译器错误/警告。假设我有以下类(class):

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;

我在另一个单元中使用了 TDog 类,如下所示:

var
  Dog : TDog;
begin
  Dog := TDog.Create;
  Dog.OnBark := DogBark;
  Dog.Bark;

现在,一旦调用 Bark() 过程,就会触发 OnBark 事件。

我的问题:

我是否可以强制指定 OnBark 属性,以便在未设置事件时发出编译器错误/警告? p>

最佳答案

将您的类定义为:

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;

这样,您就无法在不指定事件的情况下实例化 TDog 对象。如果您尝试,您将收到编译器错误。

关于delphi - 如果未设置属性,则生成编译器错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39473188/

相关文章:

delphi - 调用 ShowModal 时,表单隐藏在其他表单后面

delphi - Firebird 别名

android - Kitkat 应用程序将在 Lollipop 版本中运行吗

delphi - 通过名称调用方法 Delphi 10 Firemonkey

Delphi Indy 附件不工作

delphi - 使用 SuperObject 调用类中的过程

string - 没有引用计数的交换字符串

windows - 我应该在 Firemonkey 中使用 TMainMenu 来同时支持 Windows 和 OS-X 吗?

delphi - 这样做的目的是什么(MyJobject as ILocalObject).GetObjectID

delphi - Delphi Seattle更改IDE默认文件夹设置