复杂记录和私有默认属性

时间:2014-07-20 23:10:10

标签: delphi delphi-xe2 records

我有以下记录:

type
  TMongoIdArray = array[0..11] of Byte;

  TMongoId = record
  strict private
    FMongoIdArray: TMongoIdArray;

    function GetMongoIdByte(Index: Integer): Byte;
    procedure SetMongoIdByte(Index: Integer; const Value: Byte);
    function GetMemory: pointer;

    property MongoIdArray[Index: Integer]: Byte read GetMongoIdByte
        write SetMongoIdByte; default;
  public
    class operator Implicit(const AMongoId: TMongoIdArray): TMongoId;
    class operator Implicit(const APointer: pointer): TMongoId;
    class operator Implicit(const AVariant: Variant): TMongoId;
    class operator Implicit(const AString: String): TMongoId;
    class operator Equal(const AMongoId1, AMongoId2: TMongoId): Boolean;
    class operator NotEqual(const AMongoId1, AMongoId2: TMongoId): Boolean;

    function ToDateTime: TDateTime;
    function ToVariant: Variant;
    function ToString: String;
    function IsEmpty: Boolean;
    procedure Clear;

    property Memory: pointer read GetMemory;
  end;

我不希望用户在尝试访问此单元之外的记录方法/属性时看到MongoIdArray属性,并通过将默认属性放入{{1 }} 部分。这是常见(和推荐)的做法吗?

从评论中更新

我在询问是否通常将默认属性置于private / strict私有以隐藏它在代码中的任何位置(不仅是本地单元)。

2 个答案:

答案 0 :(得分:4)

privatestrict private之间的唯一区别是,private成员对同一单元中的所有对象和方法都是可见的,而strict private成员仅在类中可见或记录自己。

如果您唯一关心的是隐藏课外消费者的基础字段,那么只需private即可。

答案 1 :(得分:1)

  

我在询问是否通常将默认属性置于private / strict私有以隐藏它在代码中的任何位置(不仅是本地单元)。

visibility specifiersprivatestrict private是可见性说明符)是控制程序其余部分可以看到哪些符号的唯一方法。所以,这不是通常的做法,而是没有其他办法可以做到这一点。