返回值

方法可以向调用代码返回数据,返回值会直接替换调用表达式的位置。

若需要返回数据,必须在方法名前声明返回类型;无返回值则标记为void

无返回值也可以使用return,但是不需要return 值; 只需要return;就可以,表示结束执行,后面的代码不在执行了,回到调用的位置。

    int Add(int a, int b)  // 返回int类型
    {
        return a + b;
    }Code language: JavaScript (javascript)
    void SayHi() // 没有返回值
    {
        Console.WriteLine("hello welcome to foxdevelop.com");
    }Code language: JavaScript (javascript)

1 、有返回值的方法必须使用 return 表达式;,表达式运算结果类型必须匹配声明的返回类型;

    int Add(int a, int b)
    {
        return 1.2;  //报错 1.2是double类型,不能隐式转换为int类型,类型不一致所以报错
    }Code language: JavaScript (javascript)

上面代码是返回是double,1.2默认是double类型的,double就浮点数,你可以理解为小数。编译器无法把一个小数转换为整数,所以报错了。

如果反过来

    double Add2()
    {
        return 10;  // 10是int类型,可以隐式转换为double类型,类型一致所以不报错
    }Code language: JavaScript (javascript)

这样写,就没有报错,因为10虽然是整数,但是可以隐式转换为double,所以是匹配的。虽然类型不一样,但还要看是否可以隐式转换

所谓隐式转换,就是不是程序员写代码进行类型转换,而是编译器帮我们完成转换。所以叫隐式。与之对应的程序员强制转换的叫显式。

关于类型转换,后面会学到。

2 、方法内所有代码分支,最终都必须执行return返回,不能存在无返回的分支。

以上方法规定要返回int,方法名Add前面的int。但是方法体里面没有任何的return。那就也会报错的。

以上这样写也报错,因为return是在if成立的情况霞才会执行。如果a>=b的情况下,就不会执行return。那就是存在没有任何return的情况,所以报错了。

就算补充else部分,如果里面没有return,那也不行。还是那个问题,存在没有return的分支。同理其他的流程语句也是一样。必须保证程序的每个分支都没有问题。

有一种方法可以补救。可以在方法的末尾,增加一个return来进行兜底。例如

    int Add(int a, int b)
    {
        if (a < b)
        {
            return a + b;
        }
        else
        {

        }
        return -1; // 不管前面有什么分支都好,只要程序执行到了这里,就会返回
        //相当于有一个-1返回做兜底。
    }Code language: C# (cs)

返回值支持基础类型(int/string 等)、自定义类、集合等所有数据类型;

return会立刻终止当前方法,后续代码不会执行;

有返回值方法的调用可直接嵌入表达式、打印、赋值等场景。

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注