On Wed, 15 Feb 2012 22:01:51 -0500, Kevin <kevincox...@gmail.com> wrote:
I was implementing a framework and I found that I wanted two things.
- A strong set of interfaces so that I can get what I want from a
variety of sources.
- Some basic implementations of these interfaces.
For example, say I was writing a database class. I could either name
the interface Database and call the class DatabaseImplementation or
something but that is ugly. If I call the interface IDatabase, the
Database class looks nice but I need to convince users to write
functions that take IDatabases not Databases.
I was wondering if there was any way to implement a default
implementation. This way, I could create my Database interface and
classes could implement that but if you called `new Database()` you
would still get a basic database.
Aside from what has been said already, if you wish to have methods that
are not static defined in the interface, final methods currently work:
interface I
{
void foo();
final void callFoo() {writeln("about to call foo"); foo();
writeln("ok, I called foo");}
}
This isn't exactly a "default implementation", since you can't override it.
Note that template methods are supposed to work (And also are implicitly
final), but this doesn't currently work.
http://d.puremagic.com/issues/show_bug.cgi?id=4174
-Steve