2016-10-27 62 views
0

我有三個類(Class A,Class B和Class C)。 B類擁有一種方法(方法1),而C類則擁有一種方法(方法2)。 A類的主要目的是在各自的類中調用每種方法。返回關鍵字不停止執行方法

類A調用方法1 B類內:

private void buttonSave_Click(object sender, EventArgs e) { 
     Process[] processes = Process.GetProcessesByName("WINWORD");// Kill Word Process 
     ProcessForm processForm = new ProcessForm(); 
     Validation validateForm = new Validation(); 

     validateForm.Validate(this);//Call to method 1 
     processForm.CreateDocument();//Call to method 2 still gets called after a return from this method...?     
    } 

保持測試是否變量爲真或假,並且如果它是真實的我需要它返回並NOT返回的條件調用類(A類),直到值爲假:

//Class B 
if (textIsEmpty == true) 
      { 
       MessageBox.Show("Fill in the text fields"); 
       return;//Shouldnt this halt execution? 
      } 

我的問題是方法2仍然是從類C調用即使返回。我只能推測這與回到一個單獨的課程有關。

幫助將不勝感激。

+0

期待什麼這隻意味着return語句只會停止在那裏它被調用的方法的執行,並不會終止整個進程 – Sherlock

+0

放了看看會發生什麼,控件是否會在那裏執行,大部分是否定的,因爲'MessageBox.Show'是一個阻塞調用。這個'Method1'永遠不會返回,'Method2'永遠不會被調用 –

+0

[Event-driven programming](https://en.wikipedia.org/wiki/Event-driven_programming)FTW! –

回答

4

return結束當前正在執行的方法(將控制權返回給調用者)。調用者中的下一行是對另一個方法的調用。這是代碼預計繼續。

如果不應執行下一行,則應通過返回例如method1中的布爾值並在if語句中將方法2調用包裝進行指示。


//Class B 
if (textIsEmpty == true) { 
    MessageBox.Show("Fill in the text fields"); 
    return false;//Shouldnt this halt execution? 
} 

然後

private void buttonSave_Click(object sender, EventArgs e) { 
    Process[] processes = Process.GetProcessesByName("WINWORD");// Kill Word Process 
    ProcessForm processForm = new ProcessForm(); 
    Validation validateForm = new Validation(); 

    if (validateForm.Validate(this)) { //Call to method 1 
    processForm.CreateDocument();//Call to method 2 only if indicated by method 1  
    }    
} 
+1

添加代碼,而不是提供看起來像評論的答案 – Sherlock

+1

@MidTwo在中間寫樣本。我經常先寫一個答案,然後添加一個樣本來支持我的觀點 – Sascha

2
在這些線路上

修改驗證方法執行

public class B 
{ 
    public bool Validate(ClassA a) 
    { 
    // Process ClassA/FormA object 

    if (textIsEmpty == true) 
      { 
       MessageBox.Show("Fill in the text fields"); 
       return false; 
      } 
     return true; 

    } 
} 

修改調用驗證方法如下:

if(!validateForm.Validate(this)) 
    return; 
processForm.CreateDocument(); 

這將你從程序

+0

你只顯示了另一個答案的否定, – Sherlock

+0

所以,這是OP所期望的,這不能解決手頭的問題,不會調用' processForm.CreateDocument()',未驗證時。你還期待什麼? –

+1

@MidTwo答案是相隔幾分鐘。我可以相信輸入這個答案並張貼它,同時錯過了另一個答案已經發布的通知。 – hvd