方法可以向调用代码返回数据,返回值会直接替换调用表达式的位置。
若需要返回数据,必须在方法名前声明返回类型;无返回值则标记为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会立刻终止当前方法,后续代码不会执行;
有返回值方法的调用可直接嵌入表达式、打印、赋值等场景。