Not completely with this.

This bit.....

        foreach(IList list in containingLists)
        {
                // yadda yadda
        }

What sort of things are you doing in the "yadda yadda" bit.....

If you don't know the type of the elements of list you can't access them.

If you do know the type of the elements then, the type is known.

P.S.

I tend to do this with most techniques that are new to me, I abuse them to
the point where they become impractical.....and then I know their
limits....I'm just taking generics to an extreme in order to get a feel for
their practical limits/application.

-----Original Message-----
From: Discussion of advanced .NET topics.
[mailto:[EMAIL PROTECTED] On Behalf Of Frans Bouma
Sent: 18 October 2006 10:30
To: ADVANCED-DOTNET@DISCUSS.DEVELOP.COM
Subject: Re: [ADVANCED-DOTNET] Type declarations in ide....

> You'll have to explain with an example.....it's early in the
> morning and my brain isn't up to it.

public class Foo : ISomething
{
        private List<Bar> _bars;

        //... ctor, creation etc.

        List<Object> ISomething.GetContainingLists()
        {
                List<Object> toReturn = new List<Object>();
                toReturn.Add(_bars);
                return toReturn;
        }
}


Now, in some other code, an ISomething instance is passed in. This can be a
Foo instance, but it can also be a FooToo instance:

public class FooToo : ISomething
{
        private List<BarToo> _bars;

        //... ctor, creation etc.

        List<Object> ISomething.GetContainingLists()
        {
                List<Object> toReturn = new List<Object>();
                toReturn.Add(_bars);
                return toReturn;
        }
}


So, consuming code, which consumes ISomething looks like:

private void ProcessISomething(ISomething toProcess)
{
        List<Object> containingLists = toProcess.GetContainingLists();

        // and now what... how to access the lists inside containingLists ?
        // that's right, via a non-generic interface. because any generic
interface
        // would require _at compile time_ the generic type. Which is
UNKNOWN.
        foreach(IList list in containingLists)
        {
                // yadda yadda
        }
}

        You might think: I can solve this with a helper method:

private void DoProcessing<T>(List<T> toProcess)
{
        // yadday yadda
}

        and write ProcessISomething as:

        However, how would you use T in this method? You've to specify a
where clause, and ProcessISomething, how would you write
that?

        See, with generic interfaces, you don't solve this, as you then
still need a generic type parameter to specify _at compile
time_ . With NON generic interfaces you solve this. That's why non-generic
interfaces should be used to consume generic code in
routines which don't know the type of the generic parameter.

        Using interfaces is also a way to do generic programming, i.e. write
a program that can work with multiple types. Mixing
interfaces and generics, makes things only more complicated instead of more
usable and readable.

                Frans



>
> -----Original Message-----
> From: Discussion of advanced .NET topics.
> [mailto:[EMAIL PROTECTED] On Behalf Of Frans Bouma
> Sent: 17 October 2006 16:39
> To: ADVANCED-DOTNET@DISCUSS.DEVELOP.COM
> Subject: Re: [ADVANCED-DOTNET] Type declarations in ide....
>
> > I agree....its more of an experiment at the moment.....and they are
> > interfaces....just parametised ones.
>
>         Generic interfaces? Isn't that mitigating the aspect
> of interfaces?
> I mean: if you have an instance of Class<T>, and pass that to
> some code and inside that code you don't know the type of T
> (this can happen), you can refer to the instance of Class<T>
> with the interface, so your code will become very simple. If
> you have generic interfaces as well, the problem remains and
> you have to at some point need to know the type of T to get
> things compiled.
>
>         This especially creates problems when T has to be of
> some type, so where clauses have to be added to the method.
> With an interface you can solve this problem. so I always use
> the rule of thumb: use interfaces to use generic classes in
> code where you don't know the generic parameter type, and
> thus keep your interfaces non-generic just for this purpose.
>
>                 FB
>
> >
> > -----Original Message-----
> > From: Discussion of advanced .NET topics.
> > [mailto:[EMAIL PROTECTED] On Behalf Of
> Frans Bouma
> > Sent: 17 October 2006 13:17
> > To: ADVANCED-DOTNET@DISCUSS.DEVELOP.COM
> > Subject: Re: [ADVANCED-DOTNET] Type declarations in ide....
> >
> > > A slightly bizarre question....
> > >
> > > I've got some generic methods that return generic types,
> > the problem
> > > is that sometimes the types get very large...e.h.
> > >
> > >
> > > Foo<Foo<Bar<Foo<Bar>,Foo<Foo>>>> x =
> > > a.GetFoo<Foo<Bar<Foo<Bar>,Foo<Foo>>>>
> > > (b);
> > >
> > > is there a way of getting the IDE to auto generate the type
> > > declaration, so I don't spend hours foo'ing and bar'ing.
> >
> >         I'm not sure if you should continue with this. It
> makes code
> > VERY unreadable. Too much of a good is still 'too much' ;)
> >
> >         You might want to use an interface here and there.
> >
> >                 Frans
> >
> > ===================================
> > This list is hosted by DevelopMentor(r)  http://www.develop.com
> >
> > View archives and manage your subscription(s) at
> > http://discuss.develop.com
> >
> >
> > **************************************************************
> > *************
> > CONFIDENTIALITY NOTICE
> >
> > The contents of this e-mail are confidential to the
> ordinary user of
> > the e-mail address to which it was addressed, and may also be
> > privileged.  If you are not the addressee of this e-mail
> you may not
> > copy, forward, disclose or otherwise use it or any part of
> it in any
> > form whatsoever.If you have received this e-mail in error, please
> > e-mail the sender by replying to this message.
> >
> > It is your responsibility to carry out appropriate virus and other
> > checks to ensure that this message and any attachments do
> not affect
> > your systems / data. Any views or opinions expressed in this e-mail
> > are solely those of the author and do not necessarily
> represent those
> > of MTV Networks Europe unless specifically stated, nor does this
> > message form any part of any contract unless so stated.
> >
> > MTV reserves the right to monitor e-mail communications from
> > external/internal sources for the purposes of ensuring correct and
> > appropriate use of MTV communication equipment.
> >
> > MTV Networks Europe
> > **************************************************************
> > *************
> >
> >
> > ===================================
> > This list is hosted by DevelopMentorR  http://www.develop.com
> >
> > View archives and manage your subscription(s) at
> > http://discuss.develop.com
> >
>
> ===================================
> This list is hosted by DevelopMentor(r)  http://www.develop.com
>
> View archives and manage your subscription(s) at
> http://discuss.develop.com
>
>
> **************************************************************
> *************
> CONFIDENTIALITY NOTICE
>
> The contents of this e-mail are confidential to the ordinary
> user of the e-mail address to which it was addressed, and may
> also be privileged.  If you are not the addressee of this
> e-mail you may not copy, forward, disclose or otherwise use
> it or any part of it in any form whatsoever.If you have
> received this e-mail in error, please e-mail the sender by
> replying to this message.
>
> It is your responsibility to carry out appropriate virus and
> other checks to ensure that this message and any attachments
> do not affect your systems / data. Any views or opinions
> expressed in this e-mail are solely those of the author and
> do not necessarily represent those of MTV Networks Europe
> unless specifically stated, nor does this message form any
> part of any contract unless so stated.
>
> MTV reserves the right to monitor e-mail communications from
> external/internal sources for the purposes of ensuring
> correct and appropriate use of MTV communication equipment.
>
> MTV Networks Europe
> **************************************************************
> *************
>
>
> ===================================
> This list is hosted by DevelopMentorR  http://www.develop.com
>
> View archives and manage your subscription(s) at
> http://discuss.develop.com
>

===================================
This list is hosted by DevelopMentor(r)  http://www.develop.com

View archives and manage your subscription(s) at http://discuss.develop.com


***************************************************************************
CONFIDENTIALITY NOTICE

The contents of this e-mail are confidential to the ordinary user
of the e-mail address to which it was addressed, and may also
be privileged.  If you are not the addressee of this e-mail you may
not copy, forward, disclose or otherwise use it or any part of it
in any form whatsoever.If you have received this e-mail in error,
please e-mail the sender by replying to this message.

It is your responsibility to carry out appropriate virus and other
checks to ensure that this message and any attachments do not
affect your systems / data. Any views or opinions expressed in this
e-mail are solely those of the author and do not necessarily
represent those of MTV Networks Europe unless specifically stated,
nor does this message form any part of any contract unless so stated.

MTV reserves the right to monitor e-mail communications from
external/internal sources for the purposes of ensuring correct
and appropriate use of MTV communication equipment.

MTV Networks Europe
***************************************************************************


===================================
This list is hosted by DevelopMentorĀ®  http://www.develop.com

View archives and manage your subscription(s) at http://discuss.develop.com

Reply via email to