Предупреждение 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;
Другие вопросы по тегам