【问题标题】:How to create properties of classes within classes?如何在类中创建类的属性?
【发布时间】:2014-12-20 12:17:03
【问题描述】:

对于 Delphi XE6,我正在创建一个名为 TAccountSearch 的类。它有少量的属性,和一个 TObjectList 类。我的问题是我似乎无法将 TObjectList 类作为属性公开。

代码片段...创建我将用于 TObjectList 的类

  type
  TSearchHits = class
  ID: Integer;
  Name : String;
  ...
  end;

现在创建包含 TObjectList 实例的类...

type
  TAccountSearch = class
  private
    zSearchPhrase: string;
    zList: TObjectList<TSearchHits>;
    ...
    property SearchPhrase: string read zSearchPhrase; 
    property MyList:TObjectList<TSearchHits> read TObjectList<TSearchHits>;
end;

TAccountSearch.SearchPhrase 是一个有效的属性。 TAccountSearch.MyList 不是....
从 accountSearch 类中,如何让调用程序访问 SearchHits 作为属性?其次,如果我没有在 PROPERTY 行中包含 WRITE 定义,则该属性被认为是只读的。
那准确吗?这是制作只读属性的正确方法吗?

【问题讨论】:

  • property MyList: TObjectList&lt;TSearchHits&gt; read zList write zList;(或write SetzList,如果您需要设置程序)。
  • 就是这样...提交作为答案,我会相信它。至于第二个问题,这是创建只读属性的正确方法吗?
  • 我在回答中都涵盖了它们。
  • @user1009073 我对某事感到好奇。为什么要将 TObjectList 公开为只读属性?如果您想提供对 TObjectList 对象的只读访问权限(外部代码无法将 TObjectList 的引用更改为指向其他 TObjectList ,那么您可以通过将其声明从私有部分移动到公共部分来简单地公开您的内部 TObjectList 而不是使用属性. 但是,如果您只想将您的 TObjectList(项目)的内容公开给其他代码,则使用索引属性,它将从您的 TObjectList 转发数据。

标签: class delphi properties tobjectlist


【解决方案1】:

您访问实例变量zList 以获得对内部存储的访问权限:

property MyList: TObjectList<TSearchHits> read zList write zList;

如果您需要设置程序,请使用write SetMyList

您也可以使用 getter 函数来获得访问权限:

private
  function GetMyList: TObjectList<TSearchHits>;
published
  property MyList: TObjectList<TSearchHits> read GetMyList write SetMyList;

getter 函数的写法类似于

function TAccountSearch.GetMyList: TObjectList<TSearchHits>;
begin
  Result := zList;
end;

实现只读属性的方法就是省略write部分。

property MyList: TObjectList<TSearchHits> read zList;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-27
    • 2010-10-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多