如何在下面的情况下测试一个非零的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;
答案 0 :(得分:9)
obj := TObject(mystring);
这是错误的。 TObject
可以保留有效对象,或nil
。任何其他导致未定义的行为。这意味着is
或其他任何东西都不能以任何有意义的方式表现出来。
对对象引用进行操作的任何方法的实现都隐式依赖于实际为对象的引用。对于像is
这样的东西,实现会查找实例的类,这取决于作为对象布局的内存。字符串不适合账单。
is
运算符可以告诉您有关对象类型的信息。除了特殊值nil
之外,传递非对象的东西是非法的。
解决方案是停止将无效数据放入对象引用中。