问题描述
这让我大吃一惊...我只想创建一个新的IdioHandler
,而且,像往常一样,我需要在构造函数中进行一些初始化...通常,我会覆盖基类的构造函数类,但是我继承的这个 TIdioHandlerStack
远非“正常”!它没有要覆盖的构造函数,并且(对我而言)不知道它是如何创建的。
TIdEnhancedioHandler = class(TIdioHandlerStack)
private
FSendBuffer: TIdBytes;
FSendBuff: TDataStream;
public
constructor Create; // <-- I tested all the variations here,but non of them work
destructor Destroy; override;
end;
implementation
constructor TIdEnhancedioHandler.Create;
begin
inherited Create;
FSendBuff:= TDataStream.Create(@SendBuffer);
end;
destructor TIdEnhancedioHandler.Destroy;
begin
FSendBuff.Free;
inherited;
end;
initialization
TIdEnhancedioHandler.SetDefaultClass;
我应该将初始化代码放在哪里,以便在所有使用 IOHandlers 的 Indy 组件中通过默认创建 TIdEnhancedioHandler
的新实例时执行它?
解决方法
我找到了...这是我必须重写的 InitComponent
方法。
TIdEnhancedIOHandler = class(TIdIOHandlerStack)
private
FSendBuffer: TIdBytes;
FSendBuff: TDataStream;
public
procedure InitComponent; override;
destructor Destroy; override;
end;
implementation
procedure TIdEnhancedIOHandler.InitComponent;
begin
inherited;
FSendBuff:= TDataStream.Create(@SendBuffer);
end;