Предупреждение TStream в Delphi
У меня есть следующий фрагмент кода
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 ответ
Решение
TStream
является абстрактным, поэтому не следует создавать его экземпляр (вызов абстрактного метода вызывает ошибку во время выполнения). Вместо этого вам следует создать экземпляр неабстрактного потомка. Когда вы закончите, вы должны Free
экземпляр.
Например:
var
Stream: TStream;
begin
try
Stream := CreateBlobStream(FieldByName('Picture'), bmRead);
try
// ...
finally
Stream.Free;
end;
except
// handle exceptions
end;
end;