我有以下记录:
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之外的记录方法/属性时看到属性,并通过将默认属性放在strict private部分来解决这个问题。这是常见的(也是推荐的)做法吗?
从注释更新
我想问的是,将默认属性设置为私有/严格私有,以避免代码中的任何地方(不仅仅是本地单元)访问它,这是一种常见的做法。
发布于 2014-07-21 09:05:38
我想问的是,将默认属性设置为私有/严格私有,以避免代码中的任何地方(不仅仅是本地单元)访问它,这是一种常见的做法。
可见度说明符 (private和strict private是可见性说明符)是控制程序其余部分可以看到哪些符号的唯一方法。所以,这并不是说这是一种普遍的做法,而是没有其他方法可以做到这一点。
发布于 2014-07-21 01:28:05
private和strict private之间唯一的区别是,private成员对同一单元中的所有对象和方法都是可见的,而strict private成员仅在类或记录本身中可见。
如果您唯一关心的是将底层字段隐藏在类之外的使用者面前,那么简单的private就足够了。
https://stackoverflow.com/questions/24855793
复制相似问题