[fpc-pascal] property or public

Matt Emson memsom at interalpha.co.uk
Mon Jan 21 16:04:54 CET 2008


Joao Morais wrote:
> Damien Gerard wrote:
>>
>> On Jan 21, 2008, at 2:52 PM, Joao Morais wrote:
>>
>>> Damien Gerard wrote:
>>>> I have (it would seem) a stupid question :)
>>>> We have TStringList vars. User can do what he want with it.
>>>> Which one is the stupid or the better way to do it ?
>>>> TMyClass = class(TObject)
>>>> public
>>>>   <snip>
>>>>   List1: TStringList;
>>>>   List2: TStringList;
>>>> end;
>>>> or
>>>> TMyClass = class
>>>> private
>>>>   FList1: TStringList;
>>>>   FList2: TStringList;
>>>> public
>>>>   property List1: TStringList read FList1;
>>>>   property List2: TStringList read FList2;
>>>> end;
>>>
>>> The later, *much* better. You should never use class members outside 
>>> the private area.
>>
>> Thanks ! What is the reason ? I am happy I was right but I need some 
>> reason :)
>
> Encapsulation, on behalf of the integrity of the instance.
>

Implementation detail is also a good example. Then:

TMyClass = class
private
  FList1: array of string; //convoluted, but uses a different storage 
mechanism
  FList2: array of string;

protected
  function GetList1: TStringList; virtual;
  function GetList1: TStringList; virtual;

public
  property List1: TStringList read GetList1;
  property List2: TStringList read GetList2;
end;

You can implement the storage for GetList1 and GetList 2 any way that 
you wish internally, but give a uniform external interface.







More information about the fpc-pascal mailing list