如何在Delphi中使TDate参数可选?

时间:2014-06-23 11:15:51

标签: delphi parameters

我的班级看起来像这样;

type TBatchFilter = class(TObject)
  private
    FBatchNo: string;
    FLine: string;
    FCutoffDate: TDate;
  public
    constructor Create(ABatchNo, ALine: string; ACutoffDate: TDate); overload;
    constructor Create(ABatchFilter: TBatchFilter); overload;
    property BatchNo: string read FBatchNo;
    property Line: string read FLine;
    property CutoffDate: TDate read FCutoffDate;
end;

我想让ACutoffDate:TDate参数可选。我是这样调用构造函数的东西;

MyBatchFilter := TBatchFilter('BATCH1', 'LINE1', nil);

然后在构造函数中有这样的东西;

if (ACuttoffDate = nil) then
  dosomething
else
  dosomethingelse;

但我不能传递nil作为参数。 我真的不想进一步重载构造函数。

2 个答案:

答案 0 :(得分:5)

有两种明显的方法可以解决这个问题:

  1. 添加另一个省略date参数的重载构造函数。
  2. 使日期参数具有默认值,该值是某些无意义的标记值。
  3. 您已尝试将nil用作哨兵,但哨兵必须是该类型的有效值。 nil不是。{{1}}。您需要选择合适的值。也许零。或者非常大的正面或负面价值。无论您选择什么,都要声明一个命名常量,以使代码具有语义清晰度。

答案 1 :(得分:1)

您可以通过指针传递值:

constructor Create(ABatchNo, ALine: string; ACutoffDate: PDate = nil); overload;

if (ACuttoffDate = nil) then
  dosomething
else
  dosomethingelse(ACuttoffDate^);

TBatchFilter.Create('123', 'line');

TBatchFilter.Create('123', 'line', @SomeDateVar);