A();
public void A()
{
B();
MessageBox.Show("我是A方法");
}
public void B()
{
C();
MessageBox.Show("我是B方法");
//我想在此处加一些代码,让方法A后面的代码不再执行;
}
public void C()
{
MessageBox.Show("我是C方法");
//我想在此处加一些代码,让方法B后面的代码不再执行;
}
如上示例代码,当调用A方法时,整个执行顺序是:A->B->C 然后返回:C->B->A
我想实现在B或C代码中,加入一些代码,让返回终止,即:调用到C后,不再返回B,C;
想实现类似ASP.NET Response.End方法一样:
Response.Write("aaaa");
Response.End();
Response.Write("bbb");
我想过几种方案:
1.抛错,这个是可以,但如果A,B,C三个方法中都有try catch,那么就失效,即合实现但也不优雅;
2.AOP,采用代理类,将要执行的代码放到代理方法的执行前与执行后中间,如果不需要后面的执行,则执行前return即可,但最终仍然会回到最开始的调用处A,不行;
3.将ABC三个方法代码封装到不同的类中CA,CB,CC,然后在执行到B时,提前释放类CA,但发现不行。
不知道大家有没有更好的方法,求指点!
之所以需要实现后面的所有代码都不执行,是因为我想减少每个执行代码都做判断,比如:
//调用:
MessageBox.Show("开始调用");
if (A() == false) return;
MessageBox.Show("回到初始调用处的下一行代码");
public bool A()
{
if (B() == false) return false;
MessageBox.Show("我是A方法");
return true;
}
public bool B()
{
if (C() == false) return false;
MessageBox.Show("我是B方法");
return false; //通过返回flase,让被调用方A自己再判断是否为false,若为false则不执行A后面的代码
}
public bool C()
{
MessageBox.Show("我是C方法");
return true;
}
以上改过后的代码,通过层级判断方法的返回结果,来决定每个方法是否执行,少点还可以,但如果项目很多,那么这么多的判断,肯定是非常臃肿的,需要消除。
求大神指点,同时也欢迎大家讨论!!!
11 回答
小怪兽爱吃肉
TA贡献1852条经验 获得超1个赞
被调用方不能决定调用方的操作.这是常识.
你说的臃肿是不存在的.调用方不判断返回值这行代码谁看的懂.神仙也不知道这么一行调用后面的就不执行了.
就算你抛异常出去.外面都能接了继续跑.除非你把application结束了.
喵喵时光机
TA贡献1846条经验 获得超7个赞
是的,努力也无效,最终我放弃这种思路,仍采取我文中最后的方式,每个方法中都增加判断的机制。
虽然重复了一些代码,但这个是最简单,最有效的,也便于理解的。
慕盖茨4494581
TA贡献1850条经验 获得超11个赞
用多线程,确实可以起到终止执行的效果,但会带来许多的不便,比如:线程的同步问题,线程中操作UI控件等问题,虽说都有解决办法,但会将本身简单的方法复杂化,不可取。
海绵宝宝撒
TA贡献1809条经验 获得超8个赞
@梦在旅途: Response.End();好像这个就是终止了当前线程,所以你要做到这个效果一般都是针对某一个线程里面的情况。
因为你想让后面的代码不再执行,要不就跳出去(异常或者终止线程),要不就是加多代码去判断。要不然你没要绕过待执行的代码
- 11 回答
- 0 关注
- 1439 浏览
添加回答
举报
0/150
提交
取消