digitalmars.D - Class-Interface compatibility
- Frank Benoit (6/6) Mar 30 2008 COM is the only reason I am aware of, why interfaces are not implicit
- Scott S. McCoy (10/19) Mar 30 2008 It is kind of curious why interface typed identifiers don't implicitly
- Frits van Bommel (11/27) Mar 31 2008 He didn't propose handling interfaces starting with 'I' differently. He
COM is the only reason I am aware of, why interfaces are not implicit compatible to to object.Object. But COM is a very special case which probably can get a special solution? How about making /IUnknown/ a special interface without this compatibility and have all interfaces, not derived from IUnknown be compatible to Object?
Mar 30 2008
It is kind of curious why interface typed identifiers don't implicitly cast to Object, and you must explicitly cast. But regardless of the reason, adopting a convention (and a bad one at that) such as prefixing interfaces with "I" probably shouldn't be done at the language level. And even more, D already has avoided creating any kind of special types (you can throw Object, for instance, and it's not a derivative of Exception) so far as I can tell...why start now? Cheers, Scott S. McCoy On Sun, 2008-03-30 at 23:25 +0200, Frank Benoit wrote:COM is the only reason I am aware of, why interfaces are not implicit compatible to to object.Object. But COM is a very special case which probably can get a special solution? How about making /IUnknown/ a special interface without this compatibility and have all interfaces, not derived from IUnknown be compatible to Object?
Mar 30 2008
[fixed upside-down post] Scott S. McCoy wrote:On Sun, 2008-03-30 at 23:25 +0200, Frank Benoit wrote:COM is the only reason I am aware of, why interfaces are not implicit compatible to to object.Object. But COM is a very special case which probably can get a special solution? How about making /IUnknown/ a special interface without this compatibility and have all interfaces, not derived from IUnknown be compatible to Object?It is kind of curious why interface typed identifiers don't implicitly cast to Object, and you must explicitly cast. But regardless of the reason, adopting a convention (and a bad one at that) such as prefixing interfaces with "I" probably shouldn't be done at the language level. And even more, D already has avoided creating any kind of special types (you can throw Object, for instance, and it's not a derivative of /Exception/) so far as I can tell...why start now?He didn't propose handling interfaces starting with 'I' differently. He proposed handling interfaces derived from IUnknown differently. They're already treated differently[1], but he wanted to change the behavior of other interfaces without adding the same change to IUnknown-derived interfaces (since it wouldn't work there[2]). [1]: See the last part of <http://www.digitalmars.com/d/1.0/interface.html>. [2]: Objects referred to by COM interface references (see [1]) may be implemented in a different language than D, and so may not be compatible with the D Object class at all.
Mar 31 2008