如何公开保护的方法

ysai 2011-01-17 04:35:26
  TA = class
private
Fpa: Integer;
protected
property pa : Integer read Fpa;
procedure fa(AA : Integer);
end;

TB = class(TA)
public
property pa; //公开保护的属性
procedure fa; //公开保护的方法,但这样做不行
end;


D7/D2010下有什么关键字能公开保护的方法吗?
声明一个方法再inherited父类的被保护方法,这种解决方案就不要说了
...全文
213 12 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
火龙岛主 2011-01-18
  • 打赏
  • 举报
回复
TB = class(TA)
public
property pa; //公开保护的属性
procedure fa(AA: integer); //这样可以
end;

实际上可以直接访问protected中的方法

同一个单元可以随意访问,在其他单元可以使用如下方法

THackTA = class(TA);

调用的时候使用
var
vA: TA;
begin
vA := TA.Create;
try
THackTA(vA).fa(100);
finally
vA.free;
end;
end;
dyf2001 2011-01-18
  • 打赏
  • 举报
回复
没有这种关键字,只能通过10楼的办法
ysai 2011-01-18
  • 打赏
  • 举报
回复
唉,咋都看不懂我的需求呢
ysai 2011-01-17
  • 打赏
  • 举报
回复
没用过datasnap的serverclass吗

一个serverclass对应客户端的一个clientclass,所有serverclass的public方法都会被映射到clientclass中,而这两个类一般不在同一进程甚至同一计算机

所以强制转换没有意义
yyfhz 2011-01-17
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 sz_haitao 的回复:]
在本单元重新“实现”一下,就是友类了
然后用它去强制转换
[/Quote]
+1
zkroy36 2011-01-17
  • 打赏
  • 举报
回复
写个公共方法,在方法里面调用下保护或私有方法就可以了
haitao 2011-01-17
  • 打赏
  • 举报
回复
在本单元重新“实现”一下,就是友类了
然后用它去强制转换
JPEXE 2011-01-17
  • 打赏
  • 举报
回复
inherited就是最靠谱的做法,想太多不定能得出好结果。
ysai 2011-01-17
  • 打赏
  • 举报
回复
是要跨单元访问,是datasnap的serverclass
不想破坏TA的封装,又不想写个除了inherited父类的方法之外什么功能也没有的方法
JPEXE 2011-01-17
  • 打赏
  • 举报
回复
蛋疼的需求
haitao 2011-01-17
  • 打赏
  • 举报
回复
同一个单元里的类,都是友类,可以访问保护的方法
风之谷 2011-01-17
  • 打赏
  • 举报
回复
提升?

你写的对着啊,只是这个方法看起来让人纠结

procedure fa(AA : Integer);

你是继承后重写方法还是重载方法?

16,747

社区成员

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

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