我有以下记录:
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私有以隐藏它在代码中的任何位置(不仅是本地单元)。
答案 0 :(得分:4)
private
和strict private
之间的唯一区别是,private
成员对同一单元中的所有对象和方法都是可见的,而strict private
成员仅在类中可见或记录自己。
如果您唯一关心的是隐藏课外消费者的基础字段,那么只需private
即可。
答案 1 :(得分:1)
我在询问是否通常将默认属性置于private / strict私有以隐藏它在代码中的任何位置(不仅是本地单元)。
visibility specifiers(private
和strict private
是可见性说明符)是控制程序其余部分可以看到哪些符号的唯一方法。所以,这不是通常的做法,而是没有其他办法可以做到这一点。