Hi,
        I think what got me hung up was the statement in Cantu's book that
"once a Generic type has been set for that class you cannot alter it".  But
though true, this is not done when the class is created, but when it is
instantiated.  All one needs to do is create a new instance of the class and
then one can set its type.  I knew that had to be the case, but his
discussion got my wires crossed up a bit.  That's why I had to ask and make
sure!  

from "Robert Meek" dba "Tangentals Design"
Creative Concepts Programming for Windows Vista
E-mail:  ffo...@comcast.net
"Most people would sooner die than think; in fact, they do so!"
        [Bertrand Russell  1872-1970]

-----Original Message-----
From: delphi-boun...@elists.org [mailto:delphi-boun...@elists.org] On Behalf
Of Stephen Posey
Sent: Sunday, April 26, 2009 3:49 PM
To: Borland's Delphi Discussion List
Subject: Re: Generics in D2009

Robert Meek wrote:
>       Even though I had done some limited work using Oxygene, ( now Delphi
> Prism ), I never got into or even tried to make use of Generics.  There
was
> too much to learn in .NET already so I was saving them for after I became
> comfortable with it.
> Now however, and since Delphi has gone to a lot of trouble to include
them,
> I figured it was time to take a good look at them.  Once again though,
> Cantu's D2009 handbook and his theoretical approach to Generics has left
me
> a little cold.
>       It's easy enough to create and instantiate a Generic Class all
> right, but at the same time, the mere fact that once a Generic Type has
been
> set for that class you cannot alter it leaves me wondering exactly when
and
> why I would put this language feature to practical use...if of course,
that
> is truly how Generics work!   
>       In this example:
>
> type
> TSampleClass <T> = class
> private
> data: T;
> public
> function GetDataSize: Integer;
> function GetDataName: string;
> end;
> function TSampleClass<T>.GetDataSize: Integer;
> begin
> Result := SizeOf (T);
> end;
> function TSampleClass<T>.GetDataName: string;
> begin
> Result := GetTypeName (TypeInfo (T));
> end;
> end;
>
>       Am I correct in assuming that 'data : T;' cannot be altered to a
> different type once the class is created and a value/Type is given to 'T',
> because that is how it came across to me despite it not seeming to make
much
> sense!  If such is the case why would I even bother using a Generic Class?
>       If on the other hand, I created an instance of the class and gave
> 'T' a value of '0' or 'nil', depending upon the type of data I wish to
pass
> it, then I could write a procedure that first sets the Value/Type of 'T'
to
> any I want to at the moment, and then call the three class functions from
> within, it would be possible for me to reset 'T' to a different Value/Type
> each time I call this procedure!  THAT I can see as being very useful!  
>       Which of these is true?  I'm hoping I missed something along the way
> and the latter description of a Generic Class's use is correct or at least
> closer to the truth!
>   
Your statements say to me that you're missing the point and value of 
generics: they allow you to write /generic /code in a type safe fashion.

The typical use of generics involves common data structures (e.g. 
queues, stacks, trees),  with generics these can be written once using 
type generic code such as you describe, and then be applied to whatever 
sort of data might be desirable to store in them without having to fully 
specify the types ahead of time.

Type specification occurs when the generic is /instantiated/. 
Instantiation generates a new type that cannot be used with anything but 
the type(s) specified at instantiation (type safety).

This is in contrast to older approaches that involved collections of 
pointers or object references that could be used to store /anything 
/(potentially leading to hard to track type bugs), or creating custom 
descendants or wrappers to restrict the types (a repetitive and labor 
intensive process with much code duplication).

Does that help?

Stephen Posey
stephenlpo...@earthlink.net

_______________________________________________
Delphi mailing list -> Delphi@elists.org
http://lists.elists.org/cgi-bin/mailman/listinfo/delphi

_______________________________________________
Delphi mailing list -> Delphi@elists.org
http://lists.elists.org/cgi-bin/mailman/listinfo/delphi

Reply via email to