看看这堂课:
TTest = class(TObject)
public
constructor Create(A:Integer);overload;
constructor Create(A,B:Integer);overload;
end;
Run Code Online (Sandbox Code Playgroud)
现在,当我们想要使用该类时:
var
test: TTest;
begin
test:= TTest.Create; //this constructor is still visible and usable!
end;
Run Code Online (Sandbox Code Playgroud)
任何人都可以帮我隐藏这个构造函数吗?
Dav*_*nan 19
只要你有重载的构造函数命名Create,你就无法TObject在派生时隐藏无参数构造函数TObject.
这将在这里讨论:http://www.yanniel.info/2011/08/hide-tobject-create-constructor-delphi.html
如果你准备在你的班级之间另外上课,TObject你可以使用Andy Hausladen的诀窍:
TNoParameterlessContructorObject = class(TObject)
strict private
constructor Create;
end;
TTest = class(TNoParameterlessContructorObject)
public
constructor Create(A:Integer);overload;
constructor Create(A,B:Integer);overload;
end;
Run Code Online (Sandbox Code Playgroud)
Uwe*_*abe 11
您可以通过引入非重载的Create来隐藏继承的Create.由于您需要两个重载的Create,您可以使用可选的第二个参数将它们合并为一个Create:
TTest = class(TObject)
public
constructor Create(A:Integer; B: Integer = 0);
end;
Run Code Online (Sandbox Code Playgroud)
这将给出编译器警告,表示您正在隐藏默认的无参数构造函数.要摆脱警告,您可以声明隐藏构造函数,如下所示:
TTest = class(TObject)
public
constructor Create(A:Integer; B: Integer = 0); reintroduce;
end;
Run Code Online (Sandbox Code Playgroud)
或者,如果这不可行,您可以引入一个介绍第一个create的中间类,然后引入带有重载的第二个类的最终类:
preTest = class(TObject)
public
constructor Create(A:Integer); reintroduce;
end;
TTest = class(preTest)
public
constructor Create(A,B:Integer);overload;
end;
Run Code Online (Sandbox Code Playgroud)