传递nil作为参数代替TComponent

时间:2011-03-24 13:25:40

标签: delphi components null delphi-6

我遇到了一些代码,当它将nil传递给期望TComponent的构造函数时抛出异常(EIntfCasterror Cast不支持),如下所示:

obj := SomeClass.Create(nil);

它所在的单位不包含表格,甚至TForm要求在调用其构造函数时将TComponent传递给它。如果存在任何东西,或者有办法让它接受零,我应该通过什么来代替零。

谢谢。

另外,我没有调用此方法的源代码,或者我只是通过它可以访问的表单。

编辑:修复了代码示例。

EDIT2:修正了代码示例,因为我第一次写这篇文章的时候还有第二个脑屁。

EDIT3:我也没有构造函数的代码。

1 个答案:

答案 0 :(得分:2)

EIntfCastError与构造函数中传递的所有者无关。这是因为你尝试将接口转换为你认为它支持的另一个接口,而实际上它不支持它。

MyNewInterface := MyInterface as IADifferentInterface;

即使在创建TForm时,您也永远不会必需传递所有者。以下代码完全合法:

var
  MyForm: TForm1;
begin
  MyForm := TForm1.Create(nil);
  try
    MyForm.ShowModal;
  finally
    MyForm.Free;
  end
end;

这就是这个(尽管它非常愚蠢 - 但它说明了这一点):

implementation

var
  Button: TButton;

procedure TForm1.FormCreate(Sender: TObject);
begin
  Button := TButton.Create(nil);
  Button.Parent := Form1;
  Button.Left := 10;
  Button.Top := 10;
  Button.Caption := 'Button';
  Button.Name := 'MyDumbButton';
  Button.OnClick := TheButtonClick;
end;

procedure TForm1.TheButtonClick(Sender: TObject);
begin
  ShowMessage(TButton(Sender).Name + ' clicked');
end;

procedure TForm1.FormDestroy(Sender: TObject);
begin
  Button.Free;
end;