在基类中有一个虚拟方法,在子类中被覆盖。
但是,我需要在子类方法中添加一个新的参数,由于参数不同,无法使用“override”声明。
例如:
type
TFruit = class(TObject)
public
constructor Create; virtual;
end;
TApple = class(TFruit)
public
constructor Create(Color: TColor); override; // Error: Declaration of 'Create' differs from previous declaration
end;
我知道在这种情况下一个好的做法是创建一个新的方法并使用另一个名称,但很多代码会变得冗余。这个新参数只会影响几行代码...
然后我想到了使用“重载”,但这样就不能与“覆盖”一起使用。所以我问:只使用“重载”有什么问题吗?(Delphi显示警告:方法'Create'隐藏了基类型'TFruit'的虚方法)
我还查看了reintroduce + overload的用法(隐藏上面的警告),但我也看到了关于这种做法的不良建议。你认为呢?
最后,如果我只是不使用它们中的任何一个,只是在子类方法中删除“override”并添加新参数呢?(这会给我同样的警告)
有人对我在这种情况下应该怎么做有什么建议,以保持良好的实践吗?
type
TFruit = class(TObject)
public
constructor Create; virtual;
end;
TApple = class(TFruit)
public
constructor Create; override;
// What should I do:
// constructor Create(Color: TColor); overload; // Shows a warning
// constructor Create(Color: TColor); reintroduce; overload; // Hides the warning
// constructor Create(Color: TColor); // Shows a warning
// Other solution?
end;
谢谢!