[fpc-pascal] why (ClassType as TMyClass).Create fails
Michael Van Canneyt
michael at freepascal.org
Tue Jun 21 16:09:10 CEST 2016
On Tue, 21 Jun 2016, Dennis wrote:
> Following up to the cloning example code:
>
> Type
> TMyClassRef = class of TMyClass;
>
> implementation
>
> function TMyClass.Clone(AOwner: TComponent): TMyClass;
> begin
> Result := TMyClassRef(ClassType).Create(AOwner);
>
> //but the next line will fail to compile
> // Result := (ClassType as TMyClassRef).Create(aOwner);
This should be
TMyClassRef(ClassType).Create(aOwner);
> Result.Assign(Self);
> end
>
> Isn't (ClassType as TMyClassRef).Create(aOwner) supposed to be safer because
> sometimes we copy and paste code around and in the end (ClassType might not
> be a descendant of TMyClass and the compiler won't catch this type mismatch
> if we do
>
> Result := TMyClassRef(ClassType).Create(AOwner);
>
> Am I missing something?
No, this construct is not supported.
Michael.
More information about the fpc-pascal
mailing list