void方法和返回值方法之间的区别

时间:2017-07-31 13:08:32

标签: c#

在下面的例子中,我有两个方法可以做同样的事情:

 public class Program
{
    int result=0;
    int result2= 0;

    public void Add(int num1, int num2){

        result = num1 + num2;
    }

    public int Add2(int num1, int num2){

        return result2 = num1 + num2;
    }


    public static void Main(string[] args)
    {
        Program program = new Program();

        program.Add(5,6);
        Console.WriteLine(program.result);

        program.Add2(4,2);
        Console.WriteLine(program.result2);
    }
}

我得到的是void方法没有返回值,所以在上面的例子中,当我调用Add(int num1,int num2)时,是不是将结果返回给全局变量?

如果是这种情况,为什么当我打印变量时,它会在添加后打印出结果?它不应该打印出来吗?

7 个答案:

答案 0 :(得分:2)

这两种方法都是平等的,因为它们会产生意想不到的副作用 - 通常是你真正想要避免的。

第一种方法不会返回立即结果 - 它只是设置全局变量。第二种方法都返回立即结果设置全局变量。方法不能立即返回结果的事实并不意味着它不能改变任何"全局" (类或实例级)字段。

首选变体是返回立即结果,没有任何副作用,如下所示:

java.lang.Object.hashCode()

在你的课堂上,你会称之为

public static int Add(int a, int b)
{
    return a + b;
}

答案 1 :(得分:1)

方法本身不返回任何值,但这并不意味着它不能更改实例字段的值。您有一个名为result的字段,并且您在方法中为其分配了一个值,因此该值存储在result中,这就是它在控制台中打印的原因。

答案 2 :(得分:1)

  

当我调用Add ..是不是将结果返回给全局变量?

没有。您没有全局变量。你有2个类字段。在内部,你的方法都做同样的事情!他们将计算结果分配给类字段。因此保存结果,可以在主方法中访问:

Console.WriteLine(program.result2);
  

它不应该打印出来吗?

否,因为类字段已使用结果值初始化。

第二种方法是在计算和赋值后另外返回变量result2!真正的区别在于你可以在main中使用第二种方法的返回值:

int n = program.Add2(4,2);

答案 3 :(得分:0)

void methodf不会将任何类型返回给调用代码,但它会将添加的值分配给全局变量。

Void消息可能会影响Class

中字段的状态/值

答案 4 :(得分:0)

您的Add方法正在设置成员变量(结果),因此在执行该方法并打印出结果后,为什么值为11。

答案 5 :(得分:0)

在你的主要方法中,你可以做到

public static void Main(string[] args)
{
    Program program = new Program();

    int addedValue = Add2(4,2);
    //Work with addedValue
    Console.WriteLine(addedValue);
}

但如果您尝试int addedValue = program.Add(5,6);,则会出现编译错误。

答案 6 :(得分:-1)

public class Program
{
    int result=0;
    int result2= 0;

public void Add(int num1, int num2){

    result = num1 + num2;
    Console.WriteLine(result);
}

public int Add2(int num1, int num2){

    return result2 = num1 + num2;
}


public static void Main(string[] args)
{
    Program program = new Program();

    program.Add(5,6);
    Console.WriteLine(program.result);

    program.Add2(4,2);

}