社区
语言基础/算法/系统设计
帖子详情
请问在父类的代码中如何阻止子类中代码的执行?
siaosa
2003-10-17 09:35:39
请问在父类的代码中如何阻止子类中代码的执行?
例如:
TForm1.OnClick(Sender:TObject);
begin
if XXXXXXX then
....... // 防止执行子类中的代码
end;
...全文
70
15
打赏
收藏
请问在父类的代码中如何阻止子类中代码的执行?
请问在父类的代码中如何阻止子类中代码的执行? 例如: TForm1.OnClick(Sender:TObject); begin if XXXXXXX then ....... // 防止执行子类中的代码 end;
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
15 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
Hewin
2003-12-12
打赏
举报
回复
樓主的需求并不一定要你所說的那樣來解決問題!
通常是這樣來實現:
將你的
TForm1.OnClick(Sender:TObject);
begin
if XXXXXXX then
....... // 防止执行子类中的代码
end;
的Onclick(Sender:Tobject) 改為靜態, 另寫一虛擬方法如: DoOnclick(Sender:Tobject);virtual;
子類將DoOnclick 做override
父類就可以這樣寫
if not XXXXXXX then
DoOnclick // 防止执行子类中的代码
XXSingle
2003-10-30
打赏
举报
回复
只能向父类宴请执行条件,执不执行由子类决定
vcshcn
2003-10-30
打赏
举报
回复
有2种情况
1.先执行父类代码,再执行子类代码:结果当然没有阻止,因为父类没阻止住,子类执行了
2.先执行子类代码,再执行父类代码:结果是没有阻止,因为子类先执行了
结果就是不可能
lxpbuaa
2003-10-23
打赏
举报
回复
搂住问题描述不够清楚,不过这种想法当然是可行的,即所谓“先见之明”。根据实际情况可以有多种做法。比如:
1、父类设置条件,子类根据条件判断,决定是否执行相应代码。
TParent = class
procedure OneProc(var CanGo: Boolean); virtual;
end;
TChild = class(TParent)
procedure OneProc(var CanGo: Boolean); override;
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TParent.OneProc(var CanGo: Boolean);
begin
CanGo := ClassType.ClassNameIs('TParent'); //如果是通过子类而不是TParent本身调用方法OneProc,则设置CanGo = False;
end;
procedure TChild.OneProc(var CanGo: Boolean);
begin
inherited;
if CanGo then ShowMessage('go');
end;
procedure TForm1.Button1Click(Sender: TObject);
var
CanGo: Boolean;
begin
with TChild.Create do
begin
OneProc(CanGo);
Free;
end;
end;
2、在父类代码中生成(静态)异常。如:
TParent = class
procedure OneProc; virtual;
end;
TChild = class(TParent)
procedure OneProc; override;
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TParent.OneProc;
begin
if not ClassType.ClassNameIs('TParent') then
Abort;
end;
procedure TChild.OneProc;
begin
inherited;
ShowMessage('go');
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
with TChild.Create do
begin
OneProc;
Free;
end;
end;
————————————————————————————————————
宠辱不惊,看庭前花开花落,去留无意;毁誉由人,望天上云卷云舒,聚散任风。
————————————————————————————————————
delphi_xizhousheng
2003-10-22
打赏
举报
回复
好象不好实现,用abort不知道行不行
vcshcn
2003-10-22
打赏
举报
回复
sorry,也许我错了
class a
ca:a;
void safe(cls:a)
{
}
end;
class b extends a
void method();
end;
DongXF
2003-10-22
打赏
举报
回复
你現在能阻止你兒子將來娶個外國老婆嗎 ?
DongXF
2003-10-22
打赏
举报
回复
父類無法預知子類如何繼承,無法防止,何況你如果不想讓子類繼承,何必做成類呢
vcshcn
2003-10-21
打赏
举报
回复
我觉的问题 是违反面象对象的 或者你是这个意思 比如安全代理模式
vcshcn
2003-10-21
打赏
举报
回复
parent根本就不知道到底有没有child继承,如何阻止呀
FrameSniper
2003-10-20
打赏
举报
回复
呵呵,DFW的朋友已经给了你很明确的答复了
你要实现的功能在Delphi中根本不可能存在!
aiirii
2003-10-20
打赏
举报
回复
>>请问在父类的代码中如何阻止子类中代码的执行?
就我所知的知識, 無法絕對阻止;
因為子類可以重載, 或覆蓋 掉父类 的function ,procedure!!
C++ 或 java 應該可以!!!
windindance
2003-10-20
打赏
举报
回复
Raise Exception.Create('错误');
抛出异常应该可以解决你的问题。
liuziran
2003-10-20
打赏
举报
回复
如果 子类是从你自己编写的父类继承下来的,是可以做到的
Spacesoft
2003-10-18
打赏
举报
回复
完全没弄明白,你要做什么?“防止执行子类中的代码”是什么意思?给个例子看看。
子类
继承
父类
,
子类
执行
的时候,父
子类
的
执行
顺序?
父类
的static修饰的属性,
代码
块和方法(按照出现顺序
执行
)=》
子类
的static修饰的属性,
代码
块和方法=》当前主程序=》
父类
的普通属性=》
父类
的普通
代码
块=》
父类
的构造方法=》
子类
的普通属性=》
子类
的普通
代码
块=》...
父类
静态
代码
块、非静态
代码
块、构造方法、
子类
静态
代码
块、
子类
非静态
代码
块、
子类
构造方法
执行
顺序
执行
顺序为:
父类
静态
代码
块 》
父类
非静态
代码
块 》
父类
构造方法 》
子类
静态
代码
块 》
子类
非静态
代码
块 》
子类
构造方法如果换一种写法,结果又不一样了: 结果是什么呢?可以先猜一下公布答案: 你猜对了吗?...
java
中
父类
和
子类
代码
执行
顺序
**
父类
和
子类
代码
执行
顺序:**
父类
静态
代码
块–>
子类
静态
代码
块–>
父类
代码
块–>
父类
构造方法–>
子类
代码
块—>
子类
构造方法 下面
代码
展示: 1、创建A和B类,让B继承A public class A { ...
【Python】面向对象 - 继承 ② (
子类
重写
父类
成员 |
子类
调用
父类
重名成员 |
子类
中
使用
父类
类名 调用
父类
成员 |
子类
中
使用 super 调用
父类
成员 )
一、
子类
重写
父类
成员 1、
子类
重写
父类
成员语法 2、
代码
示例 -
子类
重写
父类
成员 二、
子类
调用
父类
重名成员 ...2、
代码
示例 -
子类
中
使用
父类
类名 调用
父类
成员 3、
代码
示例 -
子类
中
使用 super 调用
父类
成员
java
父类
获取
子类
对象、调用
子类
方法
1.Java
中
父类
能调用
子类
的方法吗?...(4)在
父类
中
直接new
子类
相关对象或者通过构造函数传入
子类
对象,然后调用其方法 (5)将
子类
相关方法声明为static,在
父类
中
调用
子类
的static方法 1.2 四种实现方式...
语言基础/算法/系统设计
16,748
社区成员
33,247
社区内容
发帖
与我相关
我的任务
语言基础/算法/系统设计
Delphi 语言基础/算法/系统设计
复制链接
扫一扫
分享
社区描述
Delphi 语言基础/算法/系统设计
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章