通过函数进行数据交换的最简单方式是利用返回值。有返回值的函数会最终计算得到这个值,就像在表达式中使用变量时,会计算得到变量包含的值一样。与变量一样,返回值也有数据类型。
例如,有一个函数GetStringO,其返回值是一个字符串,可在代码中使用该函数,如下所示:
string myString;
myString = GetString();
还有一个函数GetValO,它返回一个double值,可在数学表达式中使用它:
double myVal;
double multiplier = 5.3;
myVal = GetVal() * multiplier;
当函数返回一个值时,必须采用以下两种方式修改函数:
•在函数声明中指定返回值的类型,但不使用关键字void。
•使用return关键字结束函数的执行,把返回值传送给调用代码。
从代码角度看,对于我们讨论的控制台应用程序函数,其使用返回值的形式如下所示:
static <returnType> <FunctionName>()
{
...
return <returnVa1ue>;
}
这里唯一的限制是<returnType>必须是<returnType>类型的值,或者可以隐式转换为该类型。但是,可以是任何类型,包括前面介绍的较复杂类型。这段代码可以很简单:
static double GetVal()
{
return 3.2;
}
但是,返回值通常是函数执行的一些处理的结果。上面的结果使用const变量也可以简单地实现。
当执行到return语句时,程序会立即返回调用代码。这条语句后面的代码都不会执行。但这并不意味着return语句只能放在函数体的最后一行。可以在前边的代码里使用return语句,例如放在分支逻辑之后。把return语句放在for循环、if块或其他结构中会使该结构立即终止,函数也立即终止。例如:
static double GetVal()
{
double checkVal;
// cheGkVal assigned a value through some logic (not shown here).
if (checkVal < 5)
return 4.7;
return 3.2;
}
根据checkVal的值,将返回两个值中的一个。这里的唯一限制是,必须在函数的闭合花括号}之前处理 return 语句。下面的代码是不合法的:
static double GetVal()
{
double checkVal;
// checkVal assigned a value through some logic.
if (checkVal < 5)
return 4,7;
}
如果checkVal>= 5,就不会执行到return语句,这是不允许的。所有处理路径都必须执行到return语句。大多数情况下,编译器会检查是否执行到return语句,如果没有,就给出错误“并不是所有的处理路径都返回一个值”。
执行一行代码的函数可使用C# 6引入的一个功能:表达式体方法(expression-bodied method)。以下函数模式使用=>(Lambda箭头)来实现这一功能。
static <returnType> <FunctionName>() => <myVall * myVal2>;
例如,C#6之前的Multip]〆)函数如下:
static double Multiply(double myVail, double myVal2)
{
return myVail * myVal2;
}
现在可以使用=>(Lambda箭头)编写它。下述代码用更简单和统一的方式表达方法的意图:
static double Multiply(double myVall, double myVa12) => mVall * MyVal2;
已有 22658 名学员学习以下课程通过考试
最需教育客户端 软件问题一手掌握
去 App Store 免费下载 iOS 客户端
点击加载更多评论>>