什么时候在delphi中使用is运算符是正确的?

时间:2017-06-14 11:21:19

标签: 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 个答案:

答案 0 :(得分:9)

obj := TObject(mystring);

这是错误的。 TObject可以保留有效对象,或nil。任何其他导致未定义的行为。这意味着is或其他任何东西都不能以任何有意义的方式表现出来。

对对象引用进行操作的任何方法的实现都隐式依赖于实际为对象的引用。对于像is这样的东西,实现会查找实例的类,这取决于作为对象布局的内存。字符串不适合账单。

is运算符可以告诉您有关对象类型的信息。除了特殊值nil之外,传递非对象的东西是非法的。

解决方案是停止将无效数据放入对象引用中。