(原创)c#学习笔记06--函数01--定义和使用函数01--返回值

第六章 函数

  本章内容:
●  如何定义和使用不接受或返回任何数据的简单函数
●  如何在函数中传入传出数据
●  使用变量作用域
●  如何结合使用Main()函数和命令行参数
●  如何把函数提供为结构类型的成员
●  如何使用函数重载
●  如何使用委托

  我们迄今看到的代码都是以单个代码块的形式出现的,其中包含一些重复执行的循环代码,以及有条件地执行的分支语句。如果要对数据执行某种操作,就应把所需要的代码放在合适的地方。

  这种代码结构的作用是有限的。某些任务常常需要在一个程序中执行好几次,例如,查找数组中的最大值。此时可以把相同(或几乎相同)的代码块按照需要放在应用程序中,但这样做也会存在问题。在某个常见任务中,即使进行非常小的改动(例如,修改某个代码错误),也需要修改多个代码块,这些代码块可能分布在整个应用程序中。如果忘了修改其中的一个代码块,就会产生很大的影响,导致整个应用程序失败。另外,应用程序也较长。

  解决这个问题的方法是使用函数。(个人觉得上面这段描述,其实是对函数作用的一个很好解释。更是一种思路。)

  例如,有一个函数返回数组中的最大值,可以在代码的任何位置使用这个函数,且在每个地方都使用相同的代码行。因为只需要提供一次这段代码,所以对代码的任何修改将影响使用该函数进行的计算。这个函数可以看作包含可重用的代码。

  函数还可以提高代码的可读性,因为可以使用函数将相关代码组合在一起。这样,应用程序主体就会非常短,因为代码的内部工作被分散了。

  函数还可以用于创建多用途的代码,让它们对不同的数据执行相同的操作。可以采用参数形式为函数提供信息,以返回值的形式得到函数的结果。在上面的示例中,参数就是一个要搜索的数组,而返回值就是数组中的最大值。这意味着每次可以使用同一个函数处理不同的数组。函数的名称和参数(不是返回类型)共同定义了函数的签名

6.1  定义和使用函数

  首先从基础知识开始,看看不与调用代码交换任何数据的简单函数,然后介绍更高级的函数用法。首先看一个示例。代码如下:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Ch06Ex01
{
    class Program
    {
        static void Write()
        {
            Console.WriteLine("Text output from function");
        }

        static void Main(string[] args)
        {
            Write();
            Console.ReadKey();
        }
    }
}

  运行结果如下:

  上面的代码中,函数定义由以下几部分组成:

     两个关键字:static和void

     函数名后跟圆括号,如Write()

     一个要执行的代码块,放在花括号中

  函数Main()是控制台应用程序的入口点函数。当执行C#应用程序时,就会调用它包含的入口点函数,这个函数执行完毕后, 应用程序就终止了。所有C#可执行代码都必须有一个入口点。

  void更容易解释。这个关键字表明函数没有返回值。

  NOTE: 在定义函数和调用函数时,必须使用圆括号。如果删除它们,将无法编译代码。

6.1.1  返回值

  通过函数进行数据交换的最简单方式是利用返回值。有返回值的函数会计算这个值,其方式与在表达式中使用变量计算它们包含的值完全相同。与变量一样,返回值也有数据类型。

  例如,有一个函数GetString(),其返回值是一个字符串,可以在代码中使用该函数,如下所示:

      string myString; 
      myString = GetString(); 

  还有一个函数GetVal(),它返回一个double值,可以在数学表达式中使用它。

      double myVal; 
      double multiplier = 5.3; 
      myVal = GetVal() * multiplier; 

  当函数返回一个值时,可以采用以下两种方式修改函数:

    在函数声明中指定返回值的类型,但不使用关键字void。

    使用return关键字结束函数的执行,把返回值传递给调用代码。

  从代码角度分析,控制台应用程序函数中的下述代码看起来像是前面见过的函数类型:

      static <returnType> <FunctionName>() 
      { 
          ... 
          return <returnValue>; 
      }

  这里唯一的限制是<returnValue>必须是一个值,其类型可以是<returnType>,也可以隐式转换为该类型。 但是, <returnType>可以是任何类型,包括前面介绍的较复杂的类型。这段代码可以很简单:

      static double GetVal() 
      { 
          return 3.2; 
      }

  在执行到 return 语句时,程序会立即返回调用代码。这个语句后面的代码都不会执行。但是,这并不意味着return语句只能放在函数体的最后一行。可以在前边的代码里使用return, 也可能在执行了分支逻辑之后使用。把return语句放在for循环、if块或其他结构中会使该结构立即终止,函数也立即终止。例如:

      static double GetVal() 
      { 
          double checkVal; 
          // CheckVal assigned a value through some logic (not shown here). 
          if (checkVal < 5) 
              return 4.7; 
          return 3.2; 
      }

  根据checkVal的值,将返回两个值中的一个。这里唯一的限制是return语句必须在函数的闭合花括号 } 之前处理。

  最后需要注意的是,return可以用在通过void关键字声明的函数中(没有返回值)。如果这么做,函数就会立即终止。以这种方式使用 return 语何时,在 return 关键字和其后的分号之间提供返回值是错误的。

posted @ 2015-10-26 16:13  星月相随  阅读(915)  评论(0编辑  收藏  举报