如何实现属性重载 ( 积分: 50 )

  • 主题发起人 主题发起人 sunjunfeng4
  • 开始时间 开始时间
S

sunjunfeng4

Unregistered / Unconfirmed
GUEST, unregistred user!
我要实现类似这样的
type
TForm1 = class(TForm)
Button1: TButton;
private
FA:integer;
FB:string;
public
property A:integer read FA WRITE FA;
PROPERTY A:string read FB WRITE FB;
end;
到目前为止,我发现几乎所有的语言都不支持c# java delphi c++都不支付这样做,有什么办法达到目的
 
实在不明白你的意思,你上面的语法是正确的,你想覆盖父类的属性,那你就用相同的属性名,自己定义过一次就覆盖了,不过,父类的公共属性,是无法再隐藏的,因为“公布了的,就不再是秘密”
 
不是覆盖 是重载 ,C++好像是可以的
 
函数覆盖和重载是两回事!虽然他们名称一样,建议先高清他们的区别
 
晕啊,怎么没有人看得懂我的代码啊,大家都误会了,我都定义在一个类里面
property A:integer read FA WRITE FA;
PROPERTY A:string read FB WRITE FB;
定义了两上属性名相同,但类型不同的属性,就像方法重载,在同一个类里,可以定义多个方法名相同,但参数不同的方法,但属性不可以这样定义, 上面的代码是编译通不过的,不要因为我把Procedure 写成大写了误导大家了
 
恩,现在弄明白了,其实是有方法实现的,就是用variant类型啊。
只是没有意义啊,所以overload意义都不大的,
比如你定义
procedure Add(A,B:Integer);overload;
procedure Add(A,B,C:Integer);overload

其实编译器就是
procedure Add1(A,b:Integer);overload;
procedure Add2(A,b,C:Integer);overload
建议你还是定义不同的名称吧,可读性强一点。
 
那你还不如用一个变体型属性算了.
 
多人接受答案了。
 

Similar threads

后退
顶部