Delphi的对象模型是这样处理吗?那就有些恶心了

eminemlhp 2007-12-18 12:19:52
有一个基类TA声明在Uni1,有一个私有字段s。
有一个派生类TB声明在Uni2。那么我问,TB中有没有s字段?
答案是有,就是说Private字段也能被继承?Java中应该是不能的。
那s能不能访问?答案是有时能访问有时不能访问,如果你把一个TB类型的变量声明在Unit1中,就能访问,声明在Uni2中就不能访问。
Delphi将它的对象模型和文件组织结构纠缠在了一起,这我觉得是很不明智的。
...全文
123 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
小呆之家 2007-12-19
  • 打赏
  • 举报
回复
呵~~,龙生九子,各有不同.
楼主,别把不同语言的语法混起来思考问题,会乱滴.....
lextm 2007-12-19
  • 打赏
  • 举报
回复
从Delphi 2005开始Win32和.NET的编译器都支持strict private关键字,这个就可以实现完全的private了。你可以试试看。

我也不是很喜欢默认的友元类。
comanche 2007-12-19
  • 打赏
  • 举报
回复
unit 2 的 TB 有 s 私有成员,不能访问而已
同一单元下的都是友元,这是 delphi约定
c++中要显式指明友元,有经验的人都会发现,这个友元不好指明,当在写基类时,没想过有友元,完全有可能发生要申明一个友元,但这个类是之前写好的
delphi这个约定有好处
Corn1 2007-12-19
  • 打赏
  • 举报
回复
在单元的interface里面是不能循环引用,但implementation里面可以。
但同一个单元里面互为友元类,这个设计确实不好。
zhangxuyu1118 2007-12-18
  • 打赏
  • 举报
回复
"Delphi将它的对象模型和文件组织结构纠缠在了一起,这我觉得是很不明智的"仅是指在同1个单元而已,没有那么严重
eminemlhp 2007-12-18
  • 打赏
  • 举报
回复
那这种private就比较的假了,我个人还是觉得非常不好。
举个例子:
我不希望两个类是友员类,那就只能把这两个类声明在不同的pas中,但是如果A类中包含了一个B类类型成员,B类中又有一个A类类型成员,这就要求Unit1 uses Unit2并且Unit2 uses Unit1,这是没有办法实现的,在单元的接口节的uses不允许循环引用。
hsmserver 2007-12-18
  • 打赏
  • 举报
回复
Delphi中的private是限制同一个单元
禹爸爸 2007-12-18
  • 打赏
  • 举报
回复
在同一个单元中声明的类互为友元类,可以访问彼此的私有字段的。
禹爸爸 2007-12-18
  • 打赏
  • 举报
回复
声明在同一个单元中的类,互为友元类,可以访问彼此的私有字段的。

16,748

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 语言基础/算法/系统设计
社区管理员
  • 语言基础/算法/系统设计社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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