title: Complex records and private default property
body: <p>I have a following record:</p>
  
  <pre><code>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;
  </code></pre>
  
  <p>I don't want user to see <code>MongoIdArray</code> property when trying to access record methods/properties <strong>outside of this unit</strong>, and solved this by putting default property in <code>strict private</code> section. Is this common (and recommended) practice?</p>
  
  <p><strong>Update from comments</strong></p>
  
  <p>I'm asking if its common practice to put default property under private/strict private to hide it from being accessed anywhere in the code (not only local unit).</p>