On 01/15/11 10:34, Simen kjaeraas wrote: > Mandeep Singh Brar <mand...@brars.co.in> wrote: > >> Hi, >> >> I am not able to assign an interface to object. The following code >> does not compile. >> >> module testObj; >> >> public interface testInterface { >> void someMethod(); >> } >> public class testObj >> { >> Object someCaller; >> this(Object caller) { >> someCaller = caller; >> } >> this(testInterface tI, bool xyz) { >> someCaller = tI; >> } >> } >> >> Shouldn't this work? > > Nope. D allows interfaces to be special in certain cases (notably COM, > though other may be added in the future), and this precludes making > interfaces implicitly castable to Object. >
I believe interfaces marked 'extern(C++)' (for using classes defined by C++) are also somewhat special. Still, one would think that the special cases (IUnknown and extern(C++)) would be enforced without affecting "typical" interfaces. Or is there something about how D's vtbl and other affairs are laid out that I don't know about -- such that casting from an interface to Object would lose something? -- Chris N-S