Access modifier for extensions
Boyd
gaboonviper at gmx.net
Thu Jan 16 01:28:17 PST 2014
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
More information about the Digitalmars-d
mailing list