| Thread overview | ||||||||
|---|---|---|---|---|---|---|---|---|
|
July 27, 2012 interfaces and such | ||||
|---|---|---|---|---|
| ||||
Attachments:
| I have a small question: why aren't interfaces implicitly convertible to Object?
--
Bye,
Gor Gyolchanyan.
| |||
July 27, 2012 Re: interfaces and such | ||||
|---|---|---|---|---|
| ||||
Posted in reply to Gor Gyolchanyan | On 27-07-2012 16:56, Gor Gyolchanyan wrote: > I have a small question: why aren't interfaces implicitly convertible to > Object? > > -- > Bye, > Gor Gyolchanyan. I don't know if there's any particular reason, but for what it's worth: Casting an interface to Object means going through its vtable back to the original object location. In other words, it's not "free" (though the cost is extremely minimal). -- Alex Rønne Petersen alex@lycus.org http://lycus.org | |||
July 27, 2012 Re: interfaces and such | ||||
|---|---|---|---|---|
| ||||
Posted in reply to Gor Gyolchanyan | On Friday, 27 July 2012 at 14:56:18 UTC, Gor Gyolchanyan wrote:
> I have a small question: why aren't interfaces implicitly convertible to
> Object?
Not all interfaces »originate« from D objects, they can also be COM interfaces. Using (cast(Object)foo) should work if foo is really an Object.
David
| |||
August 24, 2012 Re: interfaces and such | ||||
|---|---|---|---|---|
| ||||
Posted in reply to David Nadlinger | On Fri, 27 Jul 2012 12:48:59 -0400, David Nadlinger <see@klickverbot.at>
wrote:
> On Friday, 27 July 2012 at 14:56:18 UTC, Gor Gyolchanyan wrote:
>> I have a small question: why aren't interfaces implicitly convertible to
>> Object?
>
> Not all interfaces »originate« from D objects, they can also be COM interfaces. Using (cast(Object)foo) should work if foo is really an Object.
All Com interfaces inherit from IUnknown. This is statically known.
The idea that we cannot tell which interfaces are COM and which are normal
is a myth.
There is no reason why interfaces (that aren't COM) shouldn't be
implicitly castable to Object.
-Steve
| |||
August 25, 2012 Re: interfaces and such | ||||
|---|---|---|---|---|
| ||||
Posted in reply to Steven Schveighoffer | On Friday, 24 August 2012 at 14:15:28 UTC, Steven Schveighoffer wrote:
> On Fri, 27 Jul 2012 12:48:59 -0400, David Nadlinger <see@klickverbot.at>
> wrote:
>
>> On Friday, 27 July 2012 at 14:56:18 UTC, Gor Gyolchanyan wrote:
>>> I have a small question: why aren't interfaces implicitly convertible to
>>> Object?
>>
>> Not all interfaces »originate« from D objects, they can also be COM interfaces. Using (cast(Object)foo) should work if foo is really an Object.
>
> All Com interfaces inherit from IUnknown. This is statically known.
>
> The idea that we cannot tell which interfaces are COM and which are normal
> is a myth.
>
> There is no reason why interfaces (that aren't COM) shouldn't be
> implicitly castable to Object.
>
> -Steve
Technically true, however COM is not the only example of foreign objects used via interfaces. The (limited) C++ compatibility, for example, works this way.
| |||
August 27, 2012 Re: interfaces and such | ||||
|---|---|---|---|---|
| ||||
Posted in reply to Chris Nicholson-Sauls | On Fri, 24 Aug 2012 22:01:51 -0400, Chris Nicholson-Sauls <ibisbasenji@gmail.com> wrote:
> On Friday, 24 August 2012 at 14:15:28 UTC, Steven Schveighoffer wrote:
>> On Fri, 27 Jul 2012 12:48:59 -0400, David Nadlinger <see@klickverbot.at>
>> wrote:
>>
>>> On Friday, 27 July 2012 at 14:56:18 UTC, Gor Gyolchanyan wrote:
>>>> I have a small question: why aren't interfaces implicitly convertible to
>>>> Object?
>>>
>>> Not all interfaces »originate« from D objects, they can also be COM interfaces. Using (cast(Object)foo) should work if foo is really an Object.
>>
>> All Com interfaces inherit from IUnknown. This is statically known.
>>
>> The idea that we cannot tell which interfaces are COM and which are normal
>> is a myth.
>>
>> There is no reason why interfaces (that aren't COM) shouldn't be
>> implicitly castable to Object.
>>
>> -Steve
>
> Technically true, however COM is not the only example of foreign objects used via interfaces. The (limited) C++ compatibility, for example, works this way.
Those are extern(C++), also statically known.
In fact, the very nature of how interfaces work makes it very difficult for us to *not* statically know that an interface is a D interface -- D's implementation of interfaces is not like any others.
-Steve
| |||
Copyright © 1999-2021 by the D Language Foundation
Permalink
Reply