contravariant argument types: wanna?
    Steven Schveighoffer 
    schveiguy at yahoo.com
       
    Tue Sep 22 19:22:43 PDT 2009
    
    
  
On Tue, 22 Sep 2009 21:15:54 -0400, Steven Schveighoffer  
<schveiguy at yahoo.com> wrote:
> BTW, I don't see a huge benefit from your example.  If B inherits from  
> A, then B knows about all the types A knows about (imagining an example  
> where the parameters were some other class hierarchy, like C and D), so  
> does it make a lot of sense to limit the arguments to B.fun to a base  
> class of something B must already know about?  I mean, it's not like B  
> doesn't know about the derived type, how hard would it be to just use  
> the derived type?  Maybe I'm missing something...
>
OK, here is an abstract example, maybe someone can put some real-world  
use-case to it.
I have a base class A which I want to override, but I also want to  
implement interface I (assuming I didn't write either of them).  They are  
defined as follows:
// parameter classes
class X {}
class Y: X {}
class A
{
    void foo(Y y) {}
}
interface I
{
    void foo(X x);
}
With contravariance, I could do:
class B : A, I
{
    void foo(X x) {...}
}
Without contravariance, I don't see how it could be done...
-Steve
    
    
More information about the Digitalmars-d
mailing list