Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
958 views
in Technique[技术] by (71.8m points)

delphi - 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?

See Question&Answers more detail:os

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Reply

0 votes
by (71.8m points)

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;

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
OGeek|极客中国-欢迎来到极客的世界,一个免费开放的程序员编程交流平台!开放,进步,分享!让技术改变生活,让极客改变未来! Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...