Why do private member variables behaved like protected in the same module when creating deriving class?

12345swordy alexanderheistermann at gmail.com
Sun Oct 28 22:20:55 UTC 2018


On Saturday, 27 October 2018 at 03:20:43 UTC, Mike Parker wrote:
> On Friday, 26 October 2018 at 22:01:42 UTC, 12345swordy wrote:
>> On Friday, 26 October 2018 at 21:46:27 UTC, Laurent Tréguier 
>> wrote:
>
>>> You simply seemed to be implying that private had the same 
>>> effect as protected, which isn't the case.
>> ... How can I make my self any more clear here!? When I say y 
>> behaves like x it I don't means y is exactly the x! Nor does 
>> it imply that!
>
> Here's the example code from your issue #19334:
>
> ```
> import std.stdio;
> class A
> {
>     private int y;
> }
>
> class B : A
> {
> };
>
> void main()
> {
>     B b = new B();
>     b.y = 1; // Should be a compile error as class shouldn't 
> have private int y.
>     writeln(b.y);
> }
> ```
>
> First, this really is about encapsulation and *not* 
> inheritance. Even if class B is in another module, it would 
> still inherit y, i.e. it would have its own copy of y. private 
> working as intended.
>
> Second, A, B, and main are in the same module. The spec clearly 
> says that everything in the same module has access to private 
> members. I quoted it in the bug report and it's been quoted two 
> or three times here. So main has access to y.
>
> If used to be that even if you moved the declaration of B to 
> another module, then main would still have access to y through 
> b. That was deemed to be a bug an is now deprecated. But as 
> long as they are all in the same module, it's working as 
> intended.
Oh for the record, I had realized that I had embarrassed myself 
greatly with my own stupidity. Sorry.

Alex



More information about the Digitalmars-d mailing list