[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