Когда правильно использовать оператор is в delphi?
Как я могу проверить, что не ноль TObject не содержит объект определенного класса в случае ниже?
procedure TForm7.testme;
var
mystring: string;
obj: TObject;
begin
mystring := 'asd';
obj := TObject(mystring);
if assigned(obj) then
if obj is TestClass then // --> this is failing
// ...
end;
1 ответ
obj := TObject(mystring);
Это ошибка. TObject
может содержать действительный объект или nil
, Все остальное ведет к неопределенному поведению. Который означает, что is
или даже что-то еще, нельзя ожидать, что он будет вести себя осмысленно.
Реализация любого метода, работающего с ссылкой на объект, неявно полагается на то, что ссылка действительно является объектом. Для чего-то вроде is
Реализация ищет класс экземпляра, который зависит от памяти, размечаемой как объект. Строка не соответствует требованиям.
is
Оператор может сообщить вам информацию о типе объекта. Недопустимо передавать что-то, что не является объектом для него, кроме специального значения nil
,
Решение состоит в том, чтобы прекратить помещать недопустимые данные в ссылку на ваш объект.