Delphi中的TStream警告

时间:2011-12-01 13:18:54

标签: delphi initialization tstream

我有以下代码段

 Procedure TFrm.Retrieve(mystring : string);
  var 
   bs : TStream;
   ...
  begin
    ...
    bs:=nil;
    //bs:= TStream.create; 
    try
     bs := CreateBlobStream(FieldByName('Picture'), bmRead);
    finally
     bs.Free;
    end;
  ... 
  end;   

我在理解bs变量的初始化时遇到了问题。

如果我不初始化它,我得到一个明显的警告。

 Variable 'bs' might not have been initialized.

现在,如果我将其作为评论部分,即

 bs:= TStream.create;

我收到以下警告。

Constructing instance of 'TStream' containing abstract method 'TStream.Read'
Constructing instance of 'TStream' containing abstract method 'TStream.Write'

最后,如果我使用

,它的工作完全正常
 bs:=nil;

我是否通过将其分配给Nil

来正确行事

任何观点赞赏。

1 个答案:

答案 0 :(得分:10)

TStream是抽象的,所以你不应该实例化它(调用抽象方法会导致运行时错误)。相反,您应该实例化一个非抽象的后代。当你完成后,你应该Free实例。

例如:

var
  Stream: TStream;
begin
  try
    Stream := CreateBlobStream(FieldByName('Picture'), bmRead);
    try
      // ...
    finally
      Stream.Free;
    end;
  except 
    // handle exceptions
  end;
end;