首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > .NET >

初学OOP、控件开发的人问一个在CSDN水平不高的有关问题

2012-04-20 
初学OOP、控件开发的人问一个在CSDN水平不高的问题我想用delphi写个控件,是一个矩形,但比shape受到了一些限

初学OOP、控件开发的人问一个在CSDN水平不高的问题
我想用delphi写个控件,是一个矩形,但比shape受到了一些限制:它的height固定为30,width为20*ranking+100。在对象观察器内可见的属性只有一个:ranking。ranking是正整数,取值范围1到16。颜色,只能是黑框白底,粗细已定。
一言以蔽之,就是用户只能通过数字1到16,给这个矩形变化的宽度。
请问:这样的对象可以继承Tshape吗?还是必须继承Tgraphic?

[解决办法]
公开属性好像是不能屏蔽的,不过可以用override覆盖实现
[解决办法]
不能,height,width这2个都不可重写的
[解决办法]
已经公开的属性,无法变回隐藏,但是你可以通过属性覆盖的方法,把它变成一个只读属性,从而达到接近你想要的那种效果

Delphi(Pascal) code
  published    property Height: Integer read GetHeight;function TForm1.GetHeight: Integer;begin  Result := inherited Height;end;
[解决办法]
探讨

另:属性覆盖之后用不用加override?

[解决办法]
另外补充下,这种方法其实也并不是无懈可击,只是接近效果。

所谓的属性覆盖,是指通过把属性进行“重新声明”,来改变它的读写限制或方式。因此只要把对象转型成基类,依然是可以访问到属性原始的读写限制的。所以这个“覆盖”并不是真正的覆盖,而是“掩盖”。等同于子类方法没有写override的那种情况(此时编译器就会提示方法被“hide”了)。这样也一定程度的说明了,为什么“属性覆盖”不用写override
[解决办法]
这个,你可以通过界面的输入来控制你的参数大小

热点排行