[fpc-pascal] Enum scope

Marcos Douglas md at delfire.net
Sun Mar 2 12:27:17 CET 2014


On Fri, Feb 28, 2014 at 4:44 PM, Marcos Douglas <md at delfire.net> wrote:
> On Fri, Feb 28, 2014 at 4:22 PM, Sven Barth <pascaldragon at googlemail.com> wrote:
>> On 28.02.2014 19:59, Marcos Douglas wrote:
>>>
>>> On Fri, Feb 28, 2014 at 3:47 PM, Mattias Gaertner
>>> <nc-gaertnma at netcologne.de> wrote:
>>>>
>>>>
>>>> On Fri, 28 Feb 2014 15:29:03 -0300
>>>> Marcos Douglas <md at delfire.net> wrote:
>>>>
>>>>> [...]
>>>>> These properties are defined in Process unit. My class is in myprocess
>>>>> unit
>>>>> (or something like that).
>>>>> The problem is: I can not use the enums values because they don't exists
>>>>> in
>>>>> my unit (myprocess) but if these enums were defined inside TProcess
>>>>> class
>>>>> (public type), I can use them without problem.
>>>>>
>>>>> So, what do you think about it?
>>>>
>>>>
>>>> Enums are always public and global.
>>>> For example:
>>>>
>>>>    TMyClass = class
>>>>    private
>>>>      type
>>>>        MyEnums = (enum1, enum2);
>>>>    public
>>>>      e: MyEnums;
>>>>    end;
>>>>
>>>> enum1 can be used in other units.
>>>
>>>
>>> But that's what I'm talking about!  :)
>>>
>>> So if the  TProcessOptions, TProcessPriority and TStartupOptions was
>>> declared as a type inside TProcess I do not needed to import (uses)
>>> two units (follow the example: process and myprocess) in a third unit.
>>>
>>> I propose "migrate" these enums from units to be member of classes.
>>
>>
>> Sidenote: What you propose would work only if {$scopedenums on} is used in
>> the unit which defines the enums and in that case you'd have the problem
>> with backwards compatibility.
>
> Do not need {$scopedenums on}.
> See example bellow. Unit1 uses Unit2 and this uses Unit3.
>
> The problem with backwards compatibility could be resolved using {$IFDEF} IMHO.

I do not know if that was clear.
The big problem is the dependence of the third unit to use,
necessarily, another unit (in this case, Unit3). The correct way would
be to use only Unit2 (encapsulation).

Do you agree?

Regards,
Marcos Douglas



More information about the fpc-pascal mailing list