Cheers Arjang.
This seems to be the best way to understand the type variance rules and why
they used the terms in/out in the implementation.
If all uses of the generic type parameter are in return (or out) positions
then you can get "out" variance. If all uses are in incoming positions (i.e.
parameters) then you can get "in" variance". You cannot have a mix of the
two.
In the case of IList<T> there is void .Add(T item) and IEnumerator<T>
GetEnumerator() so there is no valid variance for IList<T>
for IEnumerator<T> though there is only T Current { get; } so you can (and
do) get "out" variance so an IEnumerator<Banana> can get cast to
IEnumerator<IBanana>
Hope that helps.
Regards,
Mike
On Fri, Jun 4, 2010 at 2:37 PM, Arjang Assadi <[email protected]>wrote:
> True
>
> Nicely explained.
>
> Thank you Michael,
>
> On 4 June 2010 16:30, Michael Minutillo <[email protected]>
> wrote:
> > because of this:
> > class Apple : IBanana { }
> > ibanans.Add(new Apple() as IBanana);
> >
> > On Fri, Jun 4, 2010 at 2:27 PM, Arjang Assadi <[email protected]>
> > wrote:
> >>
> >> Given :
> >>
> >> interface IBanana {//code ommited}
> >>
> >> class Banana : IBanana {//code omitted}
> >>
> >> List<IBanana> banans;
> >>
> >> List<IBanana> ibanans = banans as List<IBanana>;
> >>
> >> ibananas == null ? why?
> >>
> >> Regards
> >>
> >> Arjang
> >
> >
> >
> > --
> > Michael M. Minutillo
> > Indiscriminate Information Sponge
> > Blog: http://wolfbyte-net.blogspot.com
> >
>
--
Michael M. Minutillo
Indiscriminate Information Sponge
Blog: http://wolfbyte-net.blogspot.com