我的班级看起来像这样;
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;
Run Code Online (Sandbox Code Playgroud)
我想让ACutoffDate:TDate参数可选.我是这样调用构造函数的东西;
MyBatchFilter := TBatchFilter('BATCH1', 'LINE1', nil);
Run Code Online (Sandbox Code Playgroud)
然后在构造函数中有这样的东西;
if (ACuttoffDate = nil) then
dosomething
else
dosomethingelse;
Run Code Online (Sandbox Code Playgroud)
但我不能将nil作为参数传递.我真的不想进一步重载构造函数.
有两种明显的方法可以解决这个问题:
您曾尝试nil用作哨兵,但哨兵必须是该类型的有效值.而且nil是没有的.您需要选择合适的值.也许零.或者是非常大的正面或负面价值.无论您选择什么,都要声明一个命名常量,以使代码具有语义清晰度.