Module-level visibility

retard re at tard.com.invalid
Tue Feb 16 11:17:23 PST 2010


Tue, 16 Feb 2010 12:49:34 -0600, Bob Jones wrote:

> "bearophile" <bearophileHUGS at lycos.com> wrote in message
> news:hlcl4c$2ack$1 at digitalmars.com...
>>I have shown this little program to some of my friends that program in
>>Java/C#:
>>
>> class Foo {
>>    private int x;
>> }
>> void main() {
>>    Foo f = new Foo;
>>    f.x = 5;
>> }
>>
>>
>> When I say them this code compiles with D2 they usually tell me that
>> the compiler has a bug.
> 
> There's probably a whole bunch of features you could do the same with. 2
> public classes in one file for example.
> 
> FWIW Delphi has the same 'module' (unit in Delphi speak) level
> visibility. And in 10 years of using it I've never had a problem with
> it. There needs to be some way to make some features visible between
> interdependant classes or else you end up having to make things public
> that only needed to be public to a few classes. It would reduce
> encapsulation in a bad way because you end up having to expose things to
> users of the module or library that they dont need to see. Because it's
> either visible to everyone or visible to no-one.
> 
> So anyone who recoils at such a feature does so for ideological reasons
> not from experience in my opninion.
> 
> But really whats needed is 'class private' and 'module private'. Then
> the idealists and the pragmatists will both be happy. :-)

Well, one feature that comes to mind are nested/inner classes. I've often 
wrapped the classes inside an outer class to provide access to some 
shared data.



More information about the Digitalmars-d mailing list