.NET基础5

  这一篇,我们来学习C#中的方法——函数

1.  方法的功能

   方法的功能:用来复用代码的,当我们在一个程序中反复的写了同样的代码,我们就可以把需要重复写的代码定义在一个方法中,用到的时候只需要调用就可以了。这样做也是对代码的封装。

  定义方法的语法:

  [访问修饰符] [static] 返回值类型 方法名([参数列表])

  { 方法体; }

2.  要注意的地方

  1. 方法可以拥有一个或多个参数,或者没有任何参数。参数列表中的参数相当于方法中的局部变量。

   2. 如果方法没有返回值的话,返回值类型为void,每个方法只有一个返回值(如果要返回多个值,可以返回一个数组或者通过参数来返回);但构造方法和析构方法例外,不允许有任何返回值。

   3. 方法中只要遇到return,立即退出方法,如果try…cathy…finally,在try里面若遇到return,finally依然会执行。

3.  方法返回多个值的例子

   a) 用数组返回多个值

static int[] Sum(int numA, int numB)
{
    int sum = numA + numB;
    int sub = numA - numB;
    int[] arrRes = new int[2];
    arrRes[0] = sum;
    arrRes[1] = sub;
    return arrRes;
}

b)用out关键字创建输出参数,返回多个值

  因为使用out修饰参数后,传递的是参数的地址,所以我们对形参进行的修改会影响到实参。

  如果在方法内,没有对被out修饰的参数进行赋值,则编译会报错: 离开当前方法之前必须对 out 参数赋值 

            int numA = 10, numB = 7;
            int sum, sub;
            sum = Test(numA, numB, out sub);//通过参数来返值
            Console.WriteLine("sum = {0}  sub = {1}", sum, sub);
            //sum = 17  sub = 3
        
        static int Test(int a, int b,out int sub)
        {
            //在没有对sub进行赋值之前,不能使用它
            //sub += 1; 错误,使用了未赋值的 out 参数“sub”    
            //sub = 1;  正确,为sub赋值
            sub = a - b;

            int sum = a + b;
            return sum;
        }                    

  c) out 与 ref 的区别:

   out 只有传出的功能,在方法内必须赋值;ref 可以传入和传出,侧重传入,在调用方法前必须赋值。

     C#通过ref这个关键字,屏蔽了C++中的指针

            int x = 2, y = 3;
            int mul = 0;
            Fun(x, y, ref mul);
            Console.WriteLine("mul = {0}", mul);
            // mul = 6    

            static void Fun(int x,int y, ref int mul) 
            {
                mul = x * y;
            }            

4.  方法中的可变参数

  Console.WriteLine(“a = {0}, b = {1}” ,  0 , 1) 中可以允许有多个参数。

  public static void WriteLine(string format, params object[] arg); 

  上面方法中的两个参数接受的值分别是:“a = {0}, b = {1}” , 一个object类型的数组 arg={0,1}

  params 的作用就是将多个参数组合成一个数组怕;如果可变参数不传的话,可变参数就是一个长度为0的数组对象。

  被params 修饰的参数必须放在方法中参数列表的最右端

        static void Main(string[] args)
        {
            int[] arrAge = { 1, 2, 3, 4, 5, 5, 67 };
            ParamesTest("刘德华", arrAge);//可变参数可以直接传递数组对象进去
            ParamesTest("刘德华", 1, 2, 3);//可变参数也可以单个的传递值
            ParamesTest("刘德华");//可变参数可以不传,那么方法中的可变参数形参就是一个Length=0的数组对象
            Console.ReadLine();
        }

        static void ParamesTest(string name, params int[] ages)//可变参数必须放在方法参数列表的最后一个
        {
            Console.WriteLine("您好?~~{0}", name);
            Console.WriteLine("ages==null:" + ages == null);
            Console.WriteLine("ages.Length=" + ages.Length);
            foreach (int age in ages)
            {
                Console.WriteLine("当前循环到的age=" + age);
            }
            Console.WriteLine();
        }

 

  输出:

             技术分享

5.  方法的重载

  一般在同一个类中,方法名相同方法的参数列表不同,才能构成方法的重载。

  注意:方法的重载与返回值没有关系。

  例如,Console.WriteLine的重载

  技术分享

    

 

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。