Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to hide the inherited TObject constructor while the class has overloaded ones?

Tags:

Take a look at this class:

TTest = class(TObject)   public     constructor Create(A:Integer);overload;     constructor Create(A,B:Integer);overload;   end; 

Now when we want to use the class:

var     test:  TTest;   begin     test:= TTest.Create; //this constructor is still visible and usable!   end; 

Can anyone help me with hiding this constructor?

like image 226
Javid Avatar asked Dec 22 '12 13:12

Javid


1 Answers

So long as you have overloaded constructors named Create, you cannot hide the parameterless TObject constructor when deriving from TObject.

This is discussed here: http://www.yanniel.info/2011/08/hide-tobject-create-constructor-delphi.html

If you are prepared to put another class between your class and TObject you can use Andy Hausladen's trick:

TNoParameterlessContructorObject = class(TObject) strict private   constructor Create; end;  TTest = class(TNoParameterlessContructorObject) public   constructor Create(A:Integer);overload;     constructor Create(A,B:Integer);overload;   end; 
like image 56
David Heffernan Avatar answered Sep 22 '22 22:09

David Heffernan