Is it a bug that a parent class that access its own private members from derived classes gets deprecation warning?
bauss
jj_1337 at live.dk
Mon Apr 9 17:16:56 UTC 2018
On Monday, 9 April 2018 at 17:05:45 UTC, martin wrote:
> On Sunday, 8 April 2018 at 13:00:02 UTC, bauss wrote:
>> I think it's better demonstrated like this, because to me the
>> behavior makes no sense.
>>
>> Especially since you can just cast "Bar" to "Foo" and then
>> you're allowed to do it.
>>
>> Since we're inside Foo then it shouldn't care whether "_baz"
>> is private or not.
>>
>> I could understand if the function was located within Bar, but
>> it's not.
>>
>> It's perfectly normal in other languages that supports classes
>> to access private members of parent's as long as you're within
>> the parent's encapsulation.
>>
>> // a.d
>> module a;
>>
>> class Foo
>> {
>> private:
>> bool _baz;
>>
>> public:
>> void handleBar(T : Foo)(T[] foos)
>> {
>> foreach (child; foos)
>> {
>> child._baz = true; // Not ok.
>> (cast(Foo)child)._baz = true; // Ok.
>> }
>> }
>> }
>>
>> // b.d
>> module b;
>>
>> import a;
>>
>> class Bar : Foo
>> {
>>
>> }
>>
>> // main.d
>>
>> module main;
>>
>> import b;
>>
>> void main()
>> {
>> auto bars = [new Bar, new Bar];
>> auto bar = new Bar;
>> bar.handleBar(bars);
>> }
>
> Actually, this behaves as i would expect.
> `_baz` is a private member of Foo (to be precise: it belongs to
> module `a`)
> in handleBar(), you iterate `Bar[]` - which is in module `b`.
> By casting it to Foo, you are accessing the wanted module (`a`)
> again.
but handleBar() is in a.
This behavior is allowed in ex. C#
More information about the Digitalmars-d
mailing list