Thread overview | |||||||||
---|---|---|---|---|---|---|---|---|---|
|
April 24, 2012 Why has base class protection been deprecated? | ||||
---|---|---|---|---|
| ||||
With the dmd 2.059 I have started getting the error 'use of base class protection is deprecated' when I try to implement an interface with private visibility, ie: interface Interface { } class Class : private Interface { } $ dmd test.d test.d(4): use of base class protection is deprecated This bothers me for two reasons: firstly it's not a base class, and secondly, it's a standard OO pattern of mine. What's up with this? Thanks, Dave |
April 24, 2012 Re: Why has base class protection been deprecated? | ||||
---|---|---|---|---|
| ||||
Posted in reply to David Bryant | On 24/04/12 14:22, David Bryant wrote:
> With the dmd 2.059 I have started getting the error 'use of base class
> protection is deprecated' when I try to implement an interface with
> private visibility, ie:
>
> interface Interface { }
>
> class Class : private Interface { }
>
> $ dmd test.d
> test.d(4): use of base class protection is deprecated
>
> This bothers me for two reasons: firstly it's not a base class, and
> secondly, it's a standard OO pattern of mine.
>
> What's up with this?
>
> Thanks,
> Dave
Because it doesn't make sense. All classes are derived from Object. That _has_ to be public, otherwise things like == wouldn't work.
Previously, the compiler used to allow base class protection, but it ignored it.
|
April 24, 2012 Re: Why has base class protection been deprecated? | ||||
---|---|---|---|---|
| ||||
Posted in reply to Don Clugston | >
> Because it doesn't make sense. All classes are derived from Object. That
> _has_ to be public, otherwise things like == wouldn't work.
>
Does the same apply for interfaces? I'm specifically implementing an interface with non-public visibility. This shouldn't affect the visibility of the implicit Object base-class.
|
April 24, 2012 Re: Why has base class protection been deprecated? | ||||
---|---|---|---|---|
| ||||
Posted in reply to David Bryant | On 24/04/12 15:29, David Bryant wrote:
>>
>> Because it doesn't make sense. All classes are derived from Object. That
>> _has_ to be public, otherwise things like == wouldn't work.
>>
>
> Does the same apply for interfaces? I'm specifically implementing an
> interface with non-public visibility. This shouldn't affect the
> visibility of the implicit Object base-class.
Right. Only classes are affected.
|
April 24, 2012 Re: Why has base class protection been deprecated? | ||||
---|---|---|---|---|
| ||||
Posted in reply to Don Clugston | On 04/24/2012 11:07 PM, Don Clugston wrote:
> On 24/04/12 15:29, David Bryant wrote:
>>>
>>> Because it doesn't make sense. All classes are derived from Object. That
>>> _has_ to be public, otherwise things like == wouldn't work.
>>>
>>
>> Does the same apply for interfaces? I'm specifically implementing an
>> interface with non-public visibility. This shouldn't affect the
>> visibility of the implicit Object base-class.
>
> Right. Only classes are affected.
Ok...so I still don't understand why the original example shouldn't compile. I'm not trying to change the visibility of the base class but rather the visibility of the interface.
|
April 24, 2012 Re: Why has base class protection been deprecated? | ||||
---|---|---|---|---|
| ||||
Posted in reply to David Bryant | On 04/24/2012 11:47 PM, David Bryant wrote:
> On 04/24/2012 11:07 PM, Don Clugston wrote:
>> On 24/04/12 15:29, David Bryant wrote:
>>>>
>>>> Because it doesn't make sense. All classes are derived from Object.
>>>> That
>>>> _has_ to be public, otherwise things like == wouldn't work.
>>>>
>>>
>>> Does the same apply for interfaces? I'm specifically implementing an
>>> interface with non-public visibility. This shouldn't affect the
>>> visibility of the implicit Object base-class.
>>
>> Right. Only classes are affected.
>
> Ok...so I still don't understand why the original example shouldn't
> compile. I'm not trying to change the visibility of the base class but
> rather the visibility of the interface.
To be clear: my subject line is misleading. I used that text because it's what came out of the compiler's mouth. I do understand your reasoning why you can't change the visibility of a base class, just not for an interface.
|
April 24, 2012 Re: Why has base class protection been deprecated? | ||||
---|---|---|---|---|
| ||||
Posted in reply to David Bryant | On Tuesday, 24 April 2012 at 12:22:14 UTC, David Bryant wrote:
> This bothers me for two reasons: firstly it's not a base class, and secondly, it's a standard OO pattern of mine.
>
> What's up with this?
Generally (and slightly inaccurately) speaking, D follows the Java model for inheritance rather than the C++ one, where base class protection attributes simply do not exist.
Besides that, I'm not quite sure what privately inheriting an interface would buy you – there would be no implementation to inherit anyway (except for final interface methods, but I doubt a valid use case for this would be easy to find)?
David
|
Copyright © 1999-2021 by the D Language Foundation