在create中继承之前初始化成员字段是否可以?
IE:
constructor TMyObject.create(AOwner: TComponent); begin fMyField := xxx; inherited end;
而不是正常的方式:
constructor TMyObject.create(AOwner: TComponent); begin inherited fMyField := xxx; end;
只知道是他们没有看到的任何缺点……
解决方法
当实例化类的实例时,分配内存并默认初始化(例如用零填充),然后调用构造函数.因此,构造函数中的任何代码都在默认初始化之后执行,这可能是您可能想象的正在解决您正在做的事情的一个时间问题.
但是,像你这样的代码通常表明更深层次的设计不适.在调用继承的构造函数之前是否初始化值有什么关系?我可以想象有两个原因你可能想要这样做:
>如果在您的派生类中声明了相关字段,那么祖先代码可以访问它的唯一方法是调用虚拟(或动态)方法.在构造函数中这样做很危险,因为对象只是部分创建的.这是一个很大的有毒代码味道.>如果有问题的字段是在祖先类中声明的,那么您可能正在使用此机制实际上将派生类的参数传递给祖先.这是一种相当奇怪的方式.更合适的方法是在构造函数中使用参数.