黑马程序员 类的方法中参数的传递

来源:互联网 发布:mongodb与mysql区别 编辑:程序博客网 时间:2024/06/05 15:32

---------------------- <a href="http://www.itheima.com"target="blank">ASP.Net+Unity开发</a>、<a href="http://www.itheima.com"target="blank">.Net培训</a>、期待与您交流! ----------------------

一、方法是类中用于计算或完成某种功能的成员;只能在结构或类中定义。

类中的方法声明格式:

方法修饰符  返回类型  方法名 (形参列表){方法体}

二、方法中参数的传递

1、值参数的传递

     值参数的传递实际相当于实参给形参复制了一份值,这样实参的值就不会改变。例如下面的例子:

 class Program
    {
        static void Main(string[] args)
        {
            int num1 = 10;
            int num2 = 20;
            Console.WriteLine(Add(num1, num2));//调用方法加后的结果
            Console.WriteLine("实参num1的值为:"+num1);            //打印实参num1和num2的值
            Console.WriteLine("实参num2的值为:"+num2);
            Console.ReadKey();
        }
        /// <summary>
        /// 一个值传递参数的方法
        /// </summary>
        /// <param name="num1"></param>
        /// <param name="num2"></param>
        /// <returns></returns>
        public static int Add(int num3,int num4) 
        {
            num3 = 30;                                                                         //改变形参的值,以方便对比形参和实参的值的变化
            num4 = 40;
            Console.WriteLine("形参num3的值为:" + num3);
            Console.WriteLine("形参num4的值为:" + num4);
            return num3 + num4;
        }
    }


从上面的例子中可以看出,无论怎么改变形参的值,实参的值都不会发生改变。这样就能确保实参的值的安全。

2、引用参数,以ref修饰符声明      输出参数  以out修饰符修饰

  某种情况下,在类的方法中我们有时需要修改方法外部的值,这时候我们就必须得到外部参数的实际地址,然后在方法中通过此地址来修改其值。

 或者为了把方法的运算结果保存到外部变量,就得知道外部变量的引用。这时用out修饰符,在方法返回后,传递的变量认为已被赋值。

ref和out区别在与: ref必须在传递参数前赋值,out则是不需要传递前赋值,但在方法中必须为其赋值

例子:

class Program
    {
        static void Main(string[] args)
        {
            int num1 = 4;                                 //使用ref修饰符必须给其先在外部赋值
            int num2 = 6;
           Console.WriteLine(Add(ref num1, ref num2));
           Console.WriteLine("修改后的num1的值为:" + num1);
           Console.WriteLine("修改后的num2的值为:" + num2);
           Console.ReadKey();
        }
       
        public static int Add( ref int num3, ref int num4) 
        {
            num3 = 10;                                //实际在修改num1的值


            num4 = 20;                               //实际在修改num2的值
            return num3+num4;
        }
    }


通过此例可以看到在方法的内部可以改变外部的值,num1和num2的值全部被修改。

out修饰符例子:

 class Program
    {
        static void Main(string[] args)
        {
            int num1;                                  //out修饰符在外部可以不用给变量赋值
            int num2;
            Add(out num1,out num2);
            Console.WriteLine("num1的值:"+num1);
            Console.WriteLine("num2的值:" + num2);
            Console.ReadKey();
        }
       
        public static int Add( out  int num3, out int  num4) 
        {
            num3 = 1;                                  //必须给num3和num4在方法里面赋值
            num4 = 2;
            return num3 + num4;
        }
    }


可以从上例看到,虽然在主程序中没有给num1和num2赋值,但通过out修饰符以后num1和num2都有值了。

4、数组参数,以params声明

     注意:数组参数使用params声明,如果形参中包含了数组参数,则它必须是参数列表中的最后一个参数。

例子:

 class Program
    {
        static void Main(string[] args)
        {
            int[] a = {1,2,3};
            Func(3,a);


            Func(5,1,2,3,4);        //相当于Func(5,new int[]{1,2,3,4})
            Func(4,new int[]{ 11, 12, 13, 14 });
            Console.ReadKey();
        }


        public static void Func(int num,params int[] a)              //数组参数必须在最后
        {
            Console.Write("数组的长度:"+a.Length+"--------");
            foreach (int i in a) 
            {
                Console.Write("{0},",i);
            }
            Console.WriteLine("\n");
        }
    }


小结:以上就是常用的方法参数的传递类型

         值类型:实际是赋值一份值给另外新开辟空间的形参,自己的值永远不变。

          ref和out:实际上都是引用类型,即存放的是变量的地址,可以直接修改变量的值。

             区别:ref在外部必须给实参赋值

                         out则不必在外部给参数赋值,在方法里面才赋值

         params:数组参数用它声明,多个形参时必须将其放在形参列表的最后。

--------------------- <a href="http://www.itheima.com"target="blank">ASP.Net+Unity开发</a>、<a href="http://www.itheima.com"target="blank">.Net培训</a>、期待与您交流! ----------------------

0 0
原创粉丝点击