如果myVar为零,指令myVar是TMyObj是否可以工作?

时间:2019-02-03 15:01:42

标签: delphi

如果myVar is TMyObj nil ,指令myVar是否可以工作?我不知道内部如何执行

2 个答案:

答案 0 :(得分:10)

如果myVar的类型为TMyObj或其后代,它将起作用,但是如果对象为nil,则返回false。

请参见The is Operator :(强调我的意思)

  

执行动态类型检查的is运算符用于验证对象的实际运行时类。表达式:

object is class
     

如果object是由class或其后代之一表示的类的实例,则返回True,否则返回False。 (如果object为nil,则结果为False。。)如果声明的object类型与class不相关,即,如果类型不同且一个不是另一个的祖先,产生编译错误。

答案 1 :(得分:1)

is的实现在系统单元中可用。

function _IsClass(const Child: TObject; Parent: TClass): Boolean;
begin
  Result := (Child <> nil) and Child.InheritsFrom(Parent);
end;

尽管如此,它并不是100%可靠的,因为is运算符周围存在一些编译器魔术。

除其他外,

var
  vWin : TWinControl;
begin
  vWin := TWinControl(TControl.Create(nil));
  if vWin is TWinControl then
    ShowMessage('The shouldn''t be true!!!');
  vWin.Free;
end;

针对(至少在西雅图)进行了优化

var
  vWin : TWinControl;
begin
  vWin := TWinControl(TControl.Create(nil));
  if vWin <> nil then
    ShowMessage('The shouldn''t be true!!!');
  vWin.Free;
end;

没有给出预期的结果。

注意:这里我不假装vWin := TWinControl(TControl.Create(nil))是有效的操作。