我有以下代码段
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
任何观点赞赏。
答案 0 :(得分:10)
TStream
是抽象的,所以你不应该实例化它(调用抽象方法会导致运行时错误)。相反,您应该实例化一个非抽象的后代。当你完成后,你应该Free
实例。
例如:
var
Stream: TStream;
begin
try
Stream := CreateBlobStream(FieldByName('Picture'), bmRead);
try
// ...
finally
Stream.Free;
end;
except
// handle exceptions
end;
end;