《C#入门经典》第6章 函数 学习笔记


1.      参数数组(params)

 

C#允许为函数指定一个(并且只能指定一个)特殊参数,这就是参数数组,参数数组必须是函数定义中的最后一个参数,它允许使用个数不定的参数来调用函数,可以使用关键字params来定义它们。(param : 参数,参数个数)

 

// 声明定义方法

static 返回值类型 函数名称 (参数类型1 参数1, 参数类型2 参数2, …… ,

params 参数类型n[]参数数组n)

{

 

     ……

    

     return 返回值;

 

}

//调用方法

函数名 (参数1, 参数2, ……, 参数n1, 参数 n2,……)

【注】 参数n1,参数n2,…… 都是必须参数类型n类型的变量,它们的个数几乎不受限制(它们的个数也可以为0)。

 

Ex:

        static void Main(string[]args)

        {

            Console.WriteLine(GetSum(1, 2, 3, 4));

        }

 

         public static int GetSum (params int[]nums)

    {

            int s = 0;

            foreach (intnum in nums)

            {

                s += num;

            }

            return s;

    }

 

 

2.      引用参数(关键字:ref)

 

在C#中,我们用ref关键字来引用变量。用法如下:

 

//定义声明一个函数

public static void ChangeItValue(ref int x)

 

//调用该函数

ChangeItValue(refx);

 

【注】 C#不允许假定ref参数在使用它的函数中初始化,所以ref参数必须使用初始化过的变量。

 

3.      输出参数(关键字:out)

 

out关键字与ref关键字的使用方式基本相同,但是二者存在一些重要的区别:

(1)      把未赋值的变量用作ref参数是非法的,但可以把未赋值的变量用作out参数

(2)      在函数使用out参数时,必须把它看成尚未赋值的变量。因为调用代码可以把已赋值的变量用作out参数,但是,存储在该变量中的值会在函数执行时丢失。

 

Ex:

//定义声明一个函数

public static void ChangeItValue(out int x)

 

//调用该函数

ChangeItValue(outx);

 

4.      委托(delegate)

 

委托是一种存储函数引用的类型。委托的声明类似函数,但不带函数体,且要用delegate关键字。委托的声明指定了一个返回类型和一个参数列表。定义了委托过后,就可以声明该委托类型的变量。接着把这个变量初始化为与委托具有相同返回类型和参数列表的函数引用。之后,就可以使用委托变量调用这个函数,就像该变量是一个函数一样。

 

Ex:

using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

using System.Threading.Tasks;

 

namespace ConsoleApplication1

{

    class Program

    {

        // 定义一个委托 ProcessDelegate, 其返回类型和参数列表与Sum(),Divide()相配。

        delegate double ProcessDelegate(doublex, double y);

        //定义Sum()函数

        static double Sum(doublex, double y)

        {

            return x + y;

        }

        //定义Divide()函数

        static double Divide(doublex, double y)

        {

            return x / y;

        }

 

        static void Main(string[]args)

        {

            //声明一个ProcessDelegate委托类型的变量process

            ProcessDelegateprocess;

 

            string input = Console.ReadLine();

 

            int commaPos = input.IndexOf(',');

 

            double x = Convert.ToDouble(input.Substring(0,commaPos));

            double y = Convert.ToDouble(input.Substring(commaPos + 1,input.Length - 1 -commaPos));

 

            input = Console.ReadLine();

 

            switch(input)

            {

                //初始化process变量

                case "S": process = newProcessDelegate(Sum);//可以简写为 process = Sum;

                    break;

 

                default: process = new ProcessDelegate(Divide);//可以简写为 process = Delive;

                    break;

 

            }

            Console.WriteLine(process(x,y));

        }

    }

}

 

你可能感兴趣的:(函数,C#)