'final' function implementations in interface definition

Robert Clipsham robert at octarineparrot.com
Sun Jun 7 15:16:58 PDT 2009


HOSOKAWA Kenchi wrote:
> Hello,
> 
> 
> Interface member functions do not have implementations. 
> This specification prevents to implement macro-like small functions which won't be overridden.
> It seems that interfaces are possible to have function implementations if the function is ensured not to be overridden.
> Hence following list will possibly avoid problems in multiple inheritance.
> 
> 
> interface I
> {
> 	void f(int);
> 	final void f_twice(int i) { f(i); f(i); }
> }
> 
> class C : I {...}
> 
> (new C).f_twice(1);
> 
> 
> 
> This list would be almost equivalent to another list
> 
> 
> 
> interface I
> {
> 	void f(int);
> }
> 
> void f_twice(I i, int n) { i.f(n); i.f(n); }
> 
> class C : I {...}
> 
> f_twice((new C), 1);

If you want this then you need abstract classes. 
http://www.digitalmars.com/d/1.0/attribute.html#abstract

abstract class A
{
   abstract void f(int);
   final void f_twice(int i) { f(i); f(i); }
}

class B : A { }

(new B).f_twice(1);



More information about the Digitalmars-d mailing list