D should have a root interface

Max Samukha samukha at voliacable.com.removethis
Mon Jul 28 21:22:53 PDT 2008


On Tue, 29 Jul 2008 09:48:49 +0800, Neil Vice
<sardonicpresence at gmail.com> wrote:

>Robert Fraser wrote:
>> 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.
>
>Can not structs implement interfaces? Should they be implicitly castable 
>to Object?

Structs cannot implement interfaces yet and, unlike C#, D doesn't do
automatic boxing/unboxing of value types.



More information about the Digitalmars-d mailing list