Delphi 获取指针的成员

Delphi 获取指针的成员,delphi,delphi-xe2,Delphi,Delphi Xe2,我有一个名为Target2的TObject,它是一个表示TLabel的指针,希望从该指针获取属性Name。所以我有这个 Procedure TGetName() var Item : TLabel; Begin if Target2 is TLabel then begin Item := Target2; if Item.Name := 'SomeName' then begin .... dosomething();

我有一个名为
Target2
TObject
,它是一个表示
TLabel
的指针,希望从该指针获取属性
Name
。所以我有这个

Procedure TGetName()
var
  Item : TLabel;
Begin
  if Target2 is TLabel then
  begin
     Item := Target2;
     if Item.Name := 'SomeName' then
       begin
        ....
       dosomething();
       end;
  end;
end;
但现在让
成为指向指针的指针似乎毫无意义,但当我这样做时:

Procedure TGetName()
Begin
  if Target2 is TLabel then
   begin
      if Target2.Name := 'SomeName' then
         begin
          ....
         dosomething();
         end;
    end;
end;

我发现错误,该名称不是
Target2
的成员。因此,在不创建指向指针Target2的另一个指针的情况下,如何访问它?

您只需要强制转换。如果您准备断言
Target2
TLabel
,则使用选中的强制转换:

var
  Lbl: TLabel;
....
Lbl := Target2 as TLabel;
否则,使用
is
进行检查,然后不检查强制转换即可:

if Target2 is TLabel then
begin
  Lbl := TLabel(Target2);
  ....

您不需要销毁
Lbl
,因为它只是对其他人拥有的对象的引用

你只需要施展一下。如果您准备断言
Target2
TLabel
,则使用选中的强制转换:

var
  Lbl: TLabel;
....
Lbl := Target2 as TLabel;
否则,使用
is
进行检查,然后不检查强制转换即可:

if Target2 is TLabel then
begin
  Lbl := TLabel(Target2);
  ....

您不需要销毁
Lbl
,因为它只是对其他人拥有的对象的引用

你只需要施展一下。如果您准备断言
Target2
TLabel
,则使用选中的强制转换:

var
  Lbl: TLabel;
....
Lbl := Target2 as TLabel;
否则,使用
is
进行检查,然后不检查强制转换即可:

if Target2 is TLabel then
begin
  Lbl := TLabel(Target2);
  ....

您不需要销毁
Lbl
,因为它只是对其他人拥有的对象的引用

你只需要施展一下。如果您准备断言
Target2
TLabel
,则使用选中的强制转换:

var
  Lbl: TLabel;
....
Lbl := Target2 as TLabel;
否则,使用
is
进行检查,然后不检查强制转换即可:

if Target2 is TLabel then
begin
  Lbl := TLabel(Target2);
  ....

您不需要销毁
Lbl
,因为它只是对其他人拥有的对象的引用

试试这个
(Target2作为TLabel)。Name:=“SomeName”
你在说什么指针??谢谢lqbal,这很有效,@MBo我在问题中提到了两个指针,但只想要1
Target2
(我想要)
Item
(我不想要)我可以将这些东西称为指针。这就是他们。它们不是C++中的引用。@ DavidHeffer-Noto-Otoh我会通过引用它们来解释它们,它们是最终指针;在Delphi中,术语“指针”指的是一种独特的类型,它包含自己的特殊语法(即@和^符号,在类型指针的情况下,指针数学),不适用于引用类型。因此,在Delphi上下文中,最好在更严格的意义上使用术语“指针”,尽管如果提问者不这样做也没什么大不了。试试这个
(Target2作为TLabel)。Name:=“SomeName”
你在说什么指针??谢谢lqbal,这很有效,@MBo我在问题中谈到了两个指针,但只想要1个
Target2
(我想要)
Item
(我不想要)我可以将这些东西称为指针。这就是他们。它们不是C++中的引用。@ DavidHeffer-Noto-Otoh我会通过引用它们来解释它们,它们是最终指针;在Delphi中,术语“指针”指的是一种独特的类型,它包含自己的特殊语法(即@和^符号,在类型指针的情况下,指针数学),不适用于引用类型。因此,在Delphi上下文中,最好在更严格的意义上使用术语“指针”,尽管如果提问者不这样做也没什么大不了。试试这个
(Target2作为TLabel)。Name:=“SomeName”
你在说什么指针??谢谢lqbal,这很有效,@MBo我在问题中谈到了两个指针,但只想要1个
Target2
(我想要)
Item
(我不想要)我可以将这些东西称为指针。这就是他们。它们不是C++中的引用。@ DavidHeffer-Noto-Otoh我会通过引用它们来解释它们,它们是最终指针;在Delphi中,术语“指针”指的是一种独特的类型,它包含自己的特殊语法(即@和^符号,在类型指针的情况下,指针数学),不适用于引用类型。因此,在Delphi上下文中,最好在更严格的意义上使用术语“指针”,尽管如果提问者不这样做也没什么大不了。试试这个
(Target2作为TLabel)。Name:=“SomeName”
你在说什么指针??谢谢lqbal,这很有效,@MBo我在问题中谈到了两个指针,但只想要1个
Target2
(我想要)
Item
(我不想要)我可以将这些东西称为指针。这就是他们。它们不是C++中的引用。@ DavidHeffer-Noto-Otoh我会通过引用它们来解释它们,它们是最终指针;在Delphi中,术语“指针”指的是一种独特的类型,它包含自己的特殊语法(即@和^符号,在类型指针的情况下,指针数学),不适用于引用类型。因此,在Delphi上下文中,最好在更严格的意义上使用术语“指针”,尽管如果提问者不这样做,这没什么大不了的。