Delphi:直接访问Field变量的属性

时间:2018-06-28 07:35:08

标签: delphi properties

我有一个包含另一个类的类。 在Delphi中可以直接访问成员类的属性吗?

TNameValue = class
private
  FSubName: string;
  FSubValue: Integer;
public
  property SubName: string read FSubName write FSubName;
  property SubValue: Integer read FSubValue write FSubValue;
end;

TParentclass = class(TSomeotherclass)
  FNameValue: TNameValue;
public
  property NameValue: TNameValue read FNameValue write FNameValue;
end;

procedure TForm.Buttonclick();
begin
  Parentclass := TParentclass.Create();
  // here i would need to directly access the Property of the member class.
  Showmessage(Parentclass.Subname);
end;

我知道我可以为要访问的子类的属性赋予所有属性,但是我在其他多个类中都拥有该类,并且我不想在子类更改时在任何地方更改代码。

有没有一种方法可以定义属性以直接发布其属性? 我知道我可以使用Parentclass.NameValue.Subname访问它,但我想使用它而无需NameValue的附加步骤。

2 个答案:

答案 0 :(得分:1)

  

有没有一种方法可以定义属性以直接发布其属性?

不可能,这是不可能的,因为您将需要多重继承来实现这一点,而Delphi不支持它。要么重新设计您的类设计,要么经历实现所需属性的麻烦。

答案 1 :(得分:1)

Delphi无法自动识别。 但您可以提供帮助。

constructor TParentClass.Create(aOwner: TComponent);
begin
  inherited Create(aOwner);
  fSubClass := TSubClass.Create(Self);
  fSubClass.SetSubComponent(True);
end;

像这样创建复合组件 一个包含另一个组件的组件

从这里更改:

unit uSubClass;

uses Classes;

type 
  TSubClass = class(TObject)
  private
    fProp: string;
  protected
    procedure SetProp(const aValue: string);
    function GetProp: string;
  public
    property Prop: string read GetProp write SetProp;
  end;

var SingleSubClass: TSubclass;

implmentation

procedure SetProp(const aValue: string);
begin
  fProp := aValue; 
end;

function GetProp: string;
begin
  Result := fProp;
end;

initialization
  SingleSubClass := TSubClass.Create;
finalization
  SingleSubClass.Free;
end;

SingleSubClass现在是全局变量,可以在另一个对象中访问。

procedure TForm123.Button1Click(Sender: TObject);
begin
  ShowMessage(SingleSubClass.Prop);
end;

如果希望其他对象收到有关其更改的通知,则必须向其添加观察者模式并注册所有感兴趣的对象以进行更改 https://sourcemaking.com/design_patterns/observer/delphi