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 關注
- 1530 瀏覽
添加回答
舉報
0/150
提交
取消