Thank you.
My Mistake, All Classes should have been of type TClassOne.
Actual code is long and in multiple units.
ETA answered what I was Sure was the answer.
aClassThree := aObject as TClassThree;
{ Or using the alternate sintax: }
aClassThree := TClassThree(aObject);
Also, note that as must be resolvable in compile time; -->> I could not find this in documentation.
"as" is a runtime construct it does not resolve at compile time. It is a two step process first it checks if its safe for the variable aobject to be used as a TClassThree and raises an exception if it is not if it is it then continues with the assignment.
The "alternate" syntax is a hard cast that takes place with out any checks or errors the compiler only generates the assignment code assuming that the programmer knows that the cast is safe. the two although equivalent in most case they are not equal.
Was hoping for Some kind of Magic.
Wanted to replace TClassThree above with a Variable.
magic of what? you can assign any object to any other object, regardless of type, using pointers, if that is what you are after, but knowing nothing about the use case I can not recommend any of the above let alone tell which is appropriate.