Search code examples
delphiconstructordefault-constructor

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


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?


Solution

  • 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;