相关疑难解决方法(0)

如何在类重载时隐藏继承的TObject构造函数?

看看这堂课:

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)

任何人都可以帮我隐藏这个构造函数吗?

delphi

20
推荐指数
2
解决办法
2780
查看次数

Delphi:如何隐藏祖先构造函数?

更新:用一个更简单的例子来解决问题,原来接受的答案没有回答

鉴于以下类及其祖先:

TComputer = class(TObject)
public
   constructor Create(Teapot: string='');
end;

TCellPhone = class(TComputer)
public
   constructor Create(Cup: Integer); overload; virtual;
   constructor Create(Cup: Integer; Teapot: string); overload; virtual;
end;
Run Code Online (Sandbox Code Playgroud)

现在TCellPhone有3个构造函数可见:

  • 杯子:整数
  • 杯子:整数; 茶壶:串
  • 茶壶:string =''

我该怎么做才能TCellPhone使祖先构造函数(Teapot: string = '')不可见,只留下声明的构造函数:

  • 杯子:整数
  • 杯子:整数; 茶壶:串

:通常简单的行为一个后代的构造函数隐藏了祖先:

TCellPhone = class(TComputer)
public
   constructor Create(Cup: Integer); virtual;
end;
Run Code Online (Sandbox Code Playgroud)
  • 杯子:整数

如果你保留祖先构造函数和后代,你可以将后代标记为overload:

TCellPhone = class(TComputer)
public
   constructor Create(Cup: Integer); overload; virtual;
end;
Run Code Online (Sandbox Code Playgroud)
  • 杯子:整数
  • 茶壶:string =''

在这个问题的示例代码中,Delphi误解了我的 …

delphi constructor delphi-5 constructor-chaining

11
推荐指数
3
解决办法
4150
查看次数