为什么Text要作为TControl这一级父类的属性,但并不是TControl所有子类都有(能访问)这个属性?

ooolinux 2021-01-17 07:07:02
是不是TControl的Text属性是保护的,部分有需要的子类再把Text属性公开出来让用户能够使用?
...全文
1402 23 打赏 收藏 转发到动态 举报
写回复
用AI写文章
23 条回复
切换为时间正序
请发表友善的回复…
发表回复
Stock king 2021-01-22
  • 打赏
  • 举报
回复
应该就是小青蛙说的原因,TControl是所有可视组件的祖先,但并不是所有可视组件都需要Text,于是就把Text作为protected属性了
xiaoxiangqing 2021-01-21
  • 打赏
  • 举报
回复
  • 打赏
  • 举报
回复
引用 12 楼 墨梅无痕 的回复:
至于 TImage,它完全可以像 TBitmap 一样归到 TGraphic 之下,但从 TControl 继承更方便易用。


这个你可完全搞反了,TImage是显示容器(虽然为了方便它默认也有一个Canvas可以绘制),TPicture是图形容器,TGraphic是图形格式容器,TBitmap、TIcon、TMetaFile、TJPEGImage等等则是具体的图形格式,层次结构是
TImage
|
TPicture
|
|TGraphic
|
TBitmap、TIcon、TMetaFile、TJPEGImage...
从上到下,越来越具体,内涵越来越大,外延越来越小,这是符合逻辑的层次结构,不可能把TImage放到TGraphic之下
  • 打赏
  • 举报
回复
因为子类是要特殊化父类的,某些父类定义的属性对子类来说可能不合适。
墨梅无痕 2021-01-19
  • 打赏
  • 举报
回复
至于 TImage,它完全可以像 TBitmap 一样归到 TGraphic 之下,但从 TControl 继承更方便易用。
墨梅无痕 2021-01-19
  • 打赏
  • 举报
回复
事实上TLabel、TButton都是有 Text 属性的(Win32 Control 都是使用的 text),只是统一再声明为 Caption。
ooolinux 2021-01-19
  • 打赏
  • 举报
回复
引用 21 楼 nikotin的回复:
[quote=引用 19 楼 ooolinux 的回复:][quote=引用 13 楼 nikotin 的回复:]因为子类是要特殊化父类的,某些父类定义的属性对子类来说可能不合适。
通常是子类有的属性父类没有[/quote] 没错儿,所以才说通常子类是要特殊化,具体化父类的,因为子类具备父类没有的属性。父类的属性一般是所有的子类都共同拥有的属性,各个子类则可以根据自己的需要添加只属于自己的属性。[/quote] 是这样的 。
ooolinux 2021-01-19
  • 打赏
  • 举报
回复
引用 20 楼 早打大打打核战争的回复:
[quote=引用 18 楼 ooolinux 的回复:][quote=引用 11 楼 墨梅无痕 的回复:]事实上TLabel、TButton都是有 Text 属性的(Win32 Control 都是使用的 text),只是统一再声明为 Caption。

这哪跟哪阿[/quote]

只能说这些组件的Caption和Text共用了内部存储
[/quote] 他说的可能MFC里面的Button用Text属性,不叫Caption。
  • 打赏
  • 举报
回复
引用 19 楼 ooolinux 的回复:
[quote=引用 13 楼 nikotin 的回复:]因为子类是要特殊化父类的,某些父类定义的属性对子类来说可能不合适。
通常是子类有的属性父类没有[/quote] 没错儿,所以才说通常子类是要特殊化,具体化父类的,因为子类具备父类没有的属性。父类的属性一般是所有的子类都共同拥有的属性,各个子类则可以根据自己的需要添加只属于自己的属性。
  • 打赏
  • 举报
回复
引用 18 楼 ooolinux 的回复:
[quote=引用 11 楼 墨梅无痕 的回复:]事实上TLabel、TButton都是有 Text 属性的(Win32 Control 都是使用的 text),只是统一再声明为 Caption。

这哪跟哪阿[/quote]

只能说这些组件的Caption和Text共用了内部存储
ooolinux 2021-01-19
  • 打赏
  • 举报
回复
引用 13 楼 nikotin 的回复:
因为子类是要特殊化父类的,某些父类定义的属性对子类来说可能不合适。

通常是子类有的属性父类没有
ooolinux 2021-01-19
  • 打赏
  • 举报
回复
引用 11 楼 墨梅无痕 的回复:
事实上TLabel、TButton都是有 Text 属性的(Win32 Control 都是使用的 text),只是统一再声明为 Caption。

这哪跟哪阿
墨梅无痕 2021-01-19
  • 打赏
  • 举报
回复
引用 14 楼 早打大打打核战争 的回复:
[quote=引用 12 楼 墨梅无痕 的回复:]至于 TImage,它完全可以像 TBitmap 一样归到 TGraphic 之下,但从 TControl 继承更方便易用。
这个你可完全搞反了,TImage是显示容器(虽然为了方便它默认也有一个Canvas可以绘制),TPicture是图形容器,TGraphic是图形格式容器,TBitmap、TIcon、TMetaFile、TJPEGImage等等则是具体的图形格式,层次结构是 TImage | TPicture | |TGraphic | TBitmap、TIcon、TMetaFile、TJPEGImage... 从上到下,越来越具体,内涵越来越大,外延越来越小,这是符合逻辑的层次结构,不可能把TImage放到TGraphic之下 [/quote] 嗯,你讲的完全正确,较我逻辑严谨。
ooolinux 2021-01-18
  • 打赏
  • 举报
回复
引用 5 楼 早打大打打核战争的回复:
应该就是小青蛙说的原因,TControl是所有可视组件的祖先,但并不是所有可视组件都需要Text,于是就把Text作为protected属性了
感觉这样设计是比较合理的。如果所有需要例如Text属性的控件,为它们抽象出一个共同父类,这样类层次就太深了,而且在增加新控件方面不够灵活。
  • 打赏
  • 举报
回复
应该就是小青蛙说的原因,TControl是所有可视组件的祖先,但并不是所有可视组件都需要Text,于是就把Text作为protected属性了
ooolinux 2021-01-18
  • 打赏
  • 举报
回复
引用 9 楼 早打大打打核战争的回复:
Delphi中有一个非常简单的方法从外部访问保护的成员,只要在访问代码所在的单元声明一下:
type yyy = class(xxx);
然后就可以通过cast xxx类型的实例为yyy类型来直接访问保护的成员:yyy(AAA).保护成员
这个方法是其他语言中没有的,CB中可以用类似的方法,但是需要把要访问的保护成员重新声明一下,稍微繁琐一点
yyy定义为xxx的派生类?还是很方便的。
  • 打赏
  • 举报
回复
Delphi中有一个非常简单的方法从外部访问保护的成员,只要在访问代码所在的单元声明一下:
type yyy = class(xxx);
然后就可以通过cast xxx类型的实例为yyy类型来直接访问保护的成员:yyy(AAA).保护成员
这个方法是其他语言中没有的,CB中可以用类似的方法,但是需要把要访问的保护成员重新声明一下,稍微繁琐一点
ooolinux 2021-01-18
  • 打赏
  • 举报
回复
引用 7 楼 tanqth 的回复:
[quote=引用 4 楼 ooolinux 的回复:][quote=引用 2 楼 imisewer 的回复:]这种东西一般我不去纠结 不影响实现需求就是了。。。。

主要了解一下VCL类库的设计。[/quote]

知其然知其所以然,这是深入学习的优点,要成为高手,必知其所以然。

protected 用于表示对象方法和字段具有有限的可见性,只能被当前的类和他的子类访问。你之前说的应该是正确的哈。[/quote]
感兴趣就想了解一下,因为曾经看到有人的博客说VCL类库有的属性是protected不方便云云,吐槽VCL的设计,看来他不是很了解。
tanqth 2021-01-18
  • 打赏
  • 举报
回复
引用 4 楼 ooolinux 的回复:
[quote=引用 2 楼 imisewer 的回复:]这种东西一般我不去纠结 不影响实现需求就是了。。。。
主要了解一下VCL类库的设计。[/quote] 知其然知其所以然,这是深入学习的优点,要成为高手,必知其所以然。 protected 用于表示对象方法和字段具有有限的可见性,只能被当前的类和他的子类访问。你之前说的应该是正确的哈。
ooolinux 2021-01-17
  • 打赏
  • 举报
回复
引用 2 楼 imisewer 的回复:
这种东西一般我不去纠结 不影响实现需求就是了。。。。

主要了解一下VCL类库的设计。
加载更多回复(3)

5,388

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 开发及应用
社区管理员
  • VCL组件开发及应用社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧