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; }
以上改过后的代码,通过层级判断方法的返回结果,来决定每个方法是否执行,少点还可以,但如果项目很多,那么这么多的判断,肯定是非常臃肿的,需要消除。
求大神指点,同时也欢迎大家讨论!!!
被调用方不能决定调用方的操作.这是常识.
你说的臃肿是不存在的.调用方不判断返回值这行代码谁看的懂.神仙也不知道这么一行调用后面的就不执行了.
就算你抛异常出去.外面都能接了继续跑.除非你把application结束了.
可能真的无解了,所以我仍然采取每个方法中都增加判断的机制。
程序由 顺序 判断 循环组成,你就不要在这方面努力了
是的,努力也无效,最终我放弃这种思路,仍采取我文中最后的方式,每个方法中都增加判断的机制。
虽然重复了一些代码,但这个是最简单,最有效的,也便于理解的。
实现通用接口
在a b c 中加入通用参数对象
以管道的方式顺序执行 在通用参数中加入一个 Isreturn 参数 如果isreturn为 true 后面就不用执行
但是你的代码结构有点问题 最好不要是嵌套结构
那与我上面的if (C() == false) return false;有什么区别,没有区别,我就是想消除这种重复判断
@梦在旅途:
没有区别 但是逻辑上可以保持一致
且这个逻辑 可以只实现一次
我还没怎么看懂意思,用线程怎么样,给个标示量,特定的时候直接终止或者挂起线程
用多线程,确实可以起到终止执行的效果,但会带来许多的不便,比如:线程的同步问题,线程中操作UI控件等问题,虽说都有解决办法,但会将本身简单的方法复杂化,不可取。
@梦在旅途: Response.End();好像这个就是终止了当前线程,所以你要做到这个效果一般都是针对某一个线程里面的情况。
因为你想让后面的代码不再执行,要不就跳出去(异常或者终止线程),要不就是加多代码去判断。要不然你没要绕过待执行的代码
@Jimmy.pan: 我意思是 new 一个 Thread ,然后就可以掌控它随时让他终止、挂起,但对主线程无影响了
有c#大神没有,我是个菜鸟,以前还好学的越多 越不会,老师说我是思路问题,求教怎么整理思路。 最好要有个大神手把手教我,谢谢各位大神了。我的Q517584338