当前位置: 首页 > 文章教程  > 计算机与互联网 > 网络编程

4.2函数是神秘的箱子

8/31/2020 9:56:04 PM 人评论

4.2函数是神秘的箱子

图片 1 知识点讲解:光盘:视频\PPT讲解(知识点)\第4章\函数是神秘的箱子.mp4

C#中的类和函数是为了满足某个功能而设计的一段代码,当程序中需要实现这个功能时,在使用时直接调用此类或函数即可。由此可以看出,类和模块的原理是一样的,一个类是为了描述一个对象而定义的;一个模块是为了实现一个功能而编写的。

C#中的函数又称为方法,它是由对象或类组成的,用于执行特定功能的代码段。函数是编程语言的核心,通过函数定义和函数的调用能够实现现实应用中所需要的功能。方法是函数的最基本成员,其他的函数构成成员都是以方法为基础实现的。所以从本质上讲,函数的实用就是方法的实用。

定义C#函数的基本语法格式如下。

特性
修饰符 返回类型 函数名
{
    函数语句
}

其中,特性和修饰符是可选的。修饰符用来控制函数的可访问性的范围,返回类型即函数处理结果的返回类型;函数名是定义的函数名称;函数语句是函数的核心。通过定义执行语句,设置这个函数所能够执行的功能。

C#的函数名称是一种标识符,所以它的命名应该符合标识符的命名规则。在具体使用时,最好能够在函数名称中体现出该函数的具体作用。

在项目中调用已定义函数的基本语法格式如下。

函数名(参数)

如果有多个参数,可以使用逗号“,”进行分割。并且各参数和函数定义中的函数类型所对应,或者可以隐式地转换为那种类型。

在特殊需要时,可以使用函数的完全限定名,即包含具体的命名空间和类。例如,前面实例中常用的“System.Console.WriteLine”。

1.函数的返回值

通过函数的返回值可以进行最基本的数据交换,有返回值的函数会计算这个值,其方式与在表达式中使用变量计算它们包含的值相同。例如,有一个函数mm(),其返回值是一个字符串,可以使用如下代码使用这个函数:

string nn;
nn=mm();

由前面的应用实例可知,可以通过如下两种方式修改函数。

  • 在函数声明中指定返回值的类型,但不可以使用void关键字。
  • 使用return关键字结束函数的运行,并把返回值传送给调用代码。

当在项目程序内使用return语句时,程序会立即返回调用代码,而这个语句后的代码都不会执行。但是,return并不一定是整个函数的最后行。例如下面的代码:

static double getVal()
 {
  double mm;
   i f (mm<6)
  return 4.5;
  return 3.5;
}

2.函数参数简介

当在函数内使用参数时,必须指定如下内容。

  • 定义函数时设置的接受参数以及对应的类型。
  • 在函数调用中设置的接受参数。

其中,参数在函数代码中通常作为一个变量。例如在下面的代码中,将参数作为变量进行了处理。

static double mm(double a, doubleb)
{
   return a * b;
}

C#函数既可以有参数,也可以没有参数。在C#程序中,可以根据具体需要使用不同类的参数。C#函数的参数可以分为如下3类。

1.值参数

声明时不使用任何修饰字符的参数是值参数。在C#中,一个值参数相当于一个局部变量,并且在程序声明和调用时,值参数只能将值带进函数,而不能将值带出函数。

2.引用参数

当声明时使用ref修饰符的参数是引用参数。在C#中,一个引用参数不能创建新的存储位置。引用参数表示的存储位置在函数调用中,被作为实际参数给出变量所表示的存储位置。在程序声明和调用时,引用参数既可以将值带进函数内,也可以将值带出函数并在函数外使用。

3.输出参数

声明时使用out修饰符的参数是输出参数。在C#中,一个输出参数不能创建新的存储位置。输出参数表示的存储位置在函数调用中,被作为参数给出变量所表示的存储位置。在程序声明和调用时,输出参数不能将值带进函数内,但能将值带出函数外使用。

在函数内部,输出参数和局部变量一样,最初是被赋值的,即使对应参数已经被明确赋值。所以在使用输出参数时,必须在使用前进行明确的赋值。

实例007 交换处理函数内的参数值

源码路径 光盘\daima\1\4\1  视频路径 光盘\视频\实例\第4章\007

实例文件zhican.cs的具体实现代码如下。

namespace zhican
{
  class Program
  {
    static void mm(int x, int y)
    {
      Console.WriteLine("进入mm函数时:x = {0}, y = {1}", x, y);
      int temp = x;
      x = y;
      y = temp;
      Console.WriteLine("退出mm函数时:x = {0}, y = {1}", x, y);
    }
    static void Main()
    {
      int i = 1, j = 2;
      Console.WriteLine("执行mm函数前:i = {0}, j = {1}", i, j);
      mm(i, j);
      Console.WriteLine("执行mm函数后:i = {0}, j = {1}", i, j);
      Console.ReadKey();
    }
  }
}
范例013:获取当前月的天数
源码路径:光盘\演练范例\013视频路径:光盘\演练范例\013范例014:获取当前日期的前一天
源码路径:光盘\演练范例\014视频路径:光盘\演练范例\014\

上述实例代码的设计过程如下。

(1)定义函数mm,并设置2个int类型的参数x和y。

(2)将x和y的值进行赋值处理,并交换它们的值。

(3)定义函数Main,并分别定义int类型的变量i和j。

(4)将变量i和j作为函数mm的参数进行处理。

(5)通过WriteLine输出对应的处理结果。

上述实例代码执行后,将调用函数进行处理,并输出对应的结果,如图4-2所示。

EY3K(2ZZFT_[NOJUA%0%PYJ

图4-2 实例执行结果

从图4-2的执行结果中可以看出,在函数mm内成功地交换了参数x和y的值。但是不会影响在函数Main内调用函数mm时,所使用的实际参数i和j的值。既然参数可以作为引用参数和输出参数来使用,那么其能否可以作为数组来使用呢?答案是肯定的,C#的参数完全可以作为数组参数和参数数组来使用。

1.参数数组

声明时使用params修饰符的参数是参数数组。在C#中,不能将修饰符params与ref和out组合使用。在函数调用时,可以通过如下两种方式为参数数组指定对应的参数。

  • 赋给参数数组的实参是一个表达式,其类型可以隐式转换为参数数组的类型。这样,参数数组将和值参数完全一致。
  • 可以为参数数组设置指定个数的实参,也可以是0个。其中的每个实参是一个表达式,其类型可以隐式地转换为参数数组元素的类型。在上述情况下,调用时会创建一个参数数组实型实例,其包含的元素个数等于给定参数的个数。

2.数组参数

在C#项目中,数组可以作为值、引用或输出参数传递给函数,并且可以根据具体要求而灵活使用。当使用数组参数时,必须遵循如下3个原则。

(1)作为值参数

当把数组作为值参数传入时,在传入数组前必须创建数组对象,并且传入前的数组元素值可以传入函数。具体说明如下。

  • 如果函数内没有改变数组对象的值,而是仅仅改变了数组元素的值,则在函数内修改的数组元素值可以从函数中带出。
  • 如果函数中改变了数组对象的值,则在函数内修改的数组元素值不会从函数中 带出。

(2)作为引用参数

当把数组作为引用参数传入时,在传入数组前必须创建数组对象。传入前的数组元素值可以传入函数,而在函数内修改的数组元素值也可以从函数中带出。

(3)作为输出参数

当把数组作为输出参数传入时,在传入数组前既可以创建数组对象,也可以不创建数组对象。但是如果在传入数组前创建了数组对象,则当传入函数后,该数组对象的值也会被忽略。所以,只有在函数中创建数组对象,数组元素值才会从函数中带出。

读者可以参阅相关资料,或通过百度获取相关的学习资源,了解C#中数组参数和参数数组的使用方法。可结合上述实例,测试数组参数和参数数组的结果。

上一篇:4.1面向对象编程基础

下一篇:4.3类

相关教程

共有条评论 网友评论

验证码: 看不清楚?