Access modifier for extensions

Boyd gaboonviper at gmx.net
Thu Jan 16 14:09:54 PST 2014


On Thursday, 16 January 2014 at 18:50:26 UTC, Vladimir Panteleev 
wrote:
> On Thursday, 16 January 2014 at 09:28:18 UTC, Boyd wrote:
>> For extending, there is the 'protected' attribute, but it's 
>> specific for class overriding only. Very often, extensions are 
>> not merely limited to derived classes. What I find myself 
>> wanting is more like the 'package' attribute, except it needs 
>> to work outside of the package as well.
>
> You can make class members accessible to a module by 
> reintroducing them in a derived class using an alias. It even 
> works for static and final methods, and field variables. 
> Example:
>
> ///////////////////////////////////////////////////////////
>
> module library;
>
> class Button
> {
> 	protected void click() {}
> }
>
> ///////////////////////////////////////////////////////////
>
> module user;
>
> import library;
>
> void main()
> {
> 	auto button = new Button();
> 	button.click(); // NG
> }
>
> ///////////////////////////////////////////////////////////
>
> module extender;
>
> import library;
>
> class ExtendedButton : Button
> {
> 	// reintroduce protected member as private to this scope
> 	private alias Button.click click;
> }
>
> void main()
> {
> 	auto button = new ExtendedButton();
> 	button.click(); // OK
> }
>
> ///////////////////////////////////////////////////////////
>
> HTH.

While it would work in this case, extending the class is not 
always an option. Plus it seems quite a big and dirty-looking 
work around for something that should, in my opinion, be quite 
simple.


More information about the Digitalmars-d mailing list