Access modifier for extensions
Gary Willoughby
dev at nomad.so
Thu Jan 16 03:18:05 PST 2014
On Thursday, 16 January 2014 at 09:28:18 UTC, Boyd wrote:
> Hi there,
>
> I have an idea for an access modifier that I wanted to throw
> out there, in the hopes that it will resonate with someone.
>
> Basically I've found that in practice, when building a module,
> I always need to keep two kind of users in mind. Those who want
> to use it, and those who want to extend it.
>
> 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.
>
> So right now, the only viable choice is making all
> functionality for users and extenders 'public'.
>
> So let's imagine the 'extendable' attribute for a moment.
> Here's what I would like it to do:
>
> Let's say someone built a GUI library, and without access to
> the library, I want to add support for another platform.
>
> ------
> module buttoncontrol
>
> public class ButtonControl
> {
> public Event pressEvent;
> extendable void click(Point position);
> }
> ------
>
> Now, you don't want a user to be able to generate a click. But
> someone whose purpose it is to extend the library, should be
> able to do it.
>
> extender
> ------
> import extendable buttoncontrol;
>
> void click(Point position)
> {
> auto button = findButtonUnderCursor(position);
> button.click(position);
> }
> ------
>
> user
> ------
> import buttoncontrol;
>
> void createUi()
> {
> auto button = new ButtonControl();
> button.click(Point(10,10)); // ERROR, no access to click
> function
> }
> ------
>
> So, that's the general idea. I haven't thought very hard about
> the syntax part, so ignore that. Let me know what you think. Is
> it useful? feasible? worth the effort?
>
> Cheers,
> Boyd
This can be achieved with traditional OOP design patterns and i
have to agree with the above poster this is too much like C++
hacking and looks horrible.
More information about the Digitalmars-d
mailing list