D should have a root interface

Robert Fraser fraserofthenight at gmail.com
Mon Jul 28 15:27:08 PDT 2008


Frank Benoit Wrote:

> // user lib
> interface List{
> 	void add(Object);
> }
> interface ArrayList : List{
> 	void add(Object){}
> }
> 
> // calling code
> List list = ...
> IFile file = ... // interface type
> list.add( file ); // compile error
> list.add( cast(Object) file );
> 
> This makes problems when one want to add() an interface instance. A cast 
> to Object is necessary. This is so ugly.
> 
> If there would be at least an empty root interface for all D interfaces, 
> this can be used for method signatures.
> 
> // D runtime and used by compiler
> interface IObject {
> }
> 
> // user lib
> interface List{
> 	void add(Object);
> 	void add(IObject);
> }
> interface ArrayList : List{
> 	void add(Object){ ... }
> 	void add(IObject io){ add(cast(Object)io); }
> }
> 
> This would not break any code and helps to make the calling code less casty.

Or, you know, just make all instances of interfaces that don't extend 
IUnknown implicitly castable to object.



More information about the Digitalmars-d mailing list