我有一个包含另一个类的类。 在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的附加步骤。
答案 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