Когда правильно использовать оператор 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,

Решение состоит в том, чтобы прекратить помещать недопустимые данные в ссылку на ваш объект.

Другие вопросы по тегам