返回关键字不会停止执行方法

时间:2016-10-27 05:36:44

标签: c# winforms

我有三个班级(A班,B班和C班)。 B类持有一种方法(方法1),而C类持有一种方法(方法2)。 A类的主要目的是在各自的类中调用每个方法。

A类调用B类中的方法1:

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类),直到值为false:

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

我的问题是,即使返回,仍然会从C类调用方法2。我只能推测它与返回一个单独的类有关。

帮助将不胜感激。

2 个答案:

答案 0 :(得分:4)

return结束当前正在执行的方法(将控件返回给调用者)。调用者中的下一行是对另一个方法的调用。这是代码预期继续的地方。

如果不应该执行下一行,你应该在method1中返回例如boolean并在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 :(得分: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();

这将完成您对本程序的期望