Struct Interface Implementation?

Max Klyga max.klyga at gmail.com
Mon Jun 13 10:57:59 PDT 2011


On 2011-06-13 06:21:47 +0300, Mehrdad said:

> Yeah I was referring to something similar to what C# has (aside from 
> the lack of boxing).
> 
> On 6/12/2011 6:46 PM, Andrei Alexandrescu wrote:
>> On 6/12/11 8:28 PM, Jonathan M Davis wrote:
>>> They aren't virtual. For an interface to work, it has to be virtual. structs
>>> are value types, not reference types. They have no virtual table and have no
>>> polymorphism.
> 
> Why would they need to be virtual? They obviously aren't in C#, but 
> they still work pretty well (e.g. foreach loops work with 
> List<T>.Enumerator, which is a struct but which can be treated as the 
> IEnumerator<T> interface), right?
In C# compiler can do stuff that you are not allowed to do, such as 
autoboxing structs in objects to allow Interface usage, calling Object 
methods or some magic duck typing. In most cases it devirtualizes 
calls, so there is no overhead in boxing.
> 
>> He must be referring to nominal conformance. It's been discussed many 
>> times. There are important disadvantages (e.g. you can't "implement" a 
>> type alias) but there are advantages too.
>> Ultimately we never got around to it.
>> 
>> Andrei
> 
> Haha ok, that's a good reason in its own way, thanks. :)




More information about the Digitalmars-d mailing list