我的班级看起来像这样;
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作为参数。 我真的不想进一步重载构造函数。
答案 0 :(得分:5)
有两种明显的方法可以解决这个问题:
您已尝试将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);