黑马程序员_函数的3种参数类型

 

下面简单介绍一下函数的3中类型的参数: 1.通过值传递参数   值传递参数为每个值参数创建一个新的存储位置,相应表达式的值复制到其中,但只是创建了值的副本,只是该副本的值发生了变化,而原先的值并没有变化,并且当该方法执  行完毕后,该值的副本也会自动被释放掉,所以原先传进来的值本身更不可能发生变化,下面举个例子:    

class Calculator  

{     

    public static void AddOne(int var)//值传递,复制了一份,所以AddOne内部改变的是副本      

   {          

      var++;      

   }      

    public static void main()      

    {          

         int number = 6;       

         AddOne(number);   

         Console.WriteLine(number);//输出6,而不是7         

         Console.ReadKey();      

     }  

}

2.通过引用传递参数(ref)   引用参数是对数据成员的内存地址的引用。与值参数不同,引用参数不创建新的存储地址。相反,引用参数表示内存的一个地址,该地址与方法调用中提供的变量的地址相同。   下面请看个例子比较一下:   

class Program   

{       

   public static void Swap1(int a, int b)     

   {           

        int c = a;           

        a = b;           

        b = c;      

   }       

   public static void Swap2(ref int a, ref int b)     

   {          

       int c = a;         

       a = b;         

       b = c;       

   }       

   public static void main()       

  {           

       int a = 9, b = 10;           

      Swap1(a,b);           

      Console.WriteLine("a={0},b={1}",a,b);//值传递,交换失败        

      Swap2(ref a, ref b);           

      Console.WriteLine("a={0},b={1}",a,b);//引用传递,交换成功          

      Console.ReadKey();       

   }  

  }

3.通过输出参数传递(out)   我们知道,要从方法中返回一个值,可以使用return语句,return语句可用于只返回单个值,而输出参数克服了这一限制。除了将参数从方法中传出而不是传入之外,输出参数    与引用参数相同,输出参数是对调用者提供的存储地址的引用。但是,为输出参数提供的变量在调用之前不需要赋值,赋值了也会被覆盖掉,方法将假设参数最初没有被初始化    。下面举个例子:  

  class Program    

{         

   static void GetInfo(out int age,out string name)//内部必须赋值,内部为外部赋值,不需要初始化,out一般用于有多个返回值的场所      

   {            

        age = 30;            

        name = "xiaoming";        

   }        

   public static void main()     

   {            

       int age = 1;            

       string name = "haha";            

       GetInfo(out age, out name);     

       Console.WriteLine("age={0},name={1}",age,name);//输出age=30,name=xiaoming              

       string str = Console.ReadLine();      

       double i;            

       if (double.TryParse(str, out i))//有两个返回值,一个为布尔型,一个给i赋值           

       {                

               Console.WriteLine("转换成功,i的值为:{0}", i);           

       }           

       else           

      {                

             Console.WriteLine("转换失败");     

      }            

      Console.ReadKey();       

  } 

 }

posted @ 2012-12-01 16:06  liqing123  阅读(209)  评论(0编辑  收藏  举报