C#函数参数

 

  • 传值参数中---- 值类型

函数传递的是方法外的变量的副本,函数内的变量变化,不会影响函数外部的变量

        static void Main(string[] args)
        {
            int a = 12;
            Add(a);//打印出函数内部的a是13
            Console.WriteLine(a);//打印出函数外部的a是12
            Console.ReadKey();
        }
        static void Add(int a)
        {
            a++;
            Console.WriteLine(a);
        }
  • 传值参数----引用类型,在函数内部重新赋给变量值

 当引用类型的变量传入函数后,在方法内部重新给参数赋值,外部变量和内部参数相互之间不会影响,这种情况一般很少见。

       static void Main(string[] args)
        {
            List<int> list = new List<int>();
            list.Add(1);
            Add(list); //打印出来2
            Console.WriteLine("函数外部的引用变量-------");
            foreach (var item in list)
            {
                Console.WriteLine(item);
            }          //打印出来1
            Console.ReadKey();
        }
        static void Add(List<int> list)
        {
            list = new List<int>();
            list.Add(2);
            Console.WriteLine("函数内部的引用变量-------");
            foreach (var item in list)
            {
                Console.WriteLine(item);
            }           
        }
  • 传值参数---引用类型

当引用类型传入函数时,方法外部的变量和方法内部的参数的引用地址相同,指向同一个地址,在函数内部改变参数时,外部的变量也发生了变化。

   static void Main(string[] args)
        {
            List<int> list = new List<int>();
            list.Add(1);
            Add(list);//打印出来1,2
            Console.WriteLine("函数外部的引用变量-------");
            foreach (var item in list)
            {
                Console.WriteLine(item);
            }         //也打印出来1,2
            Console.ReadKey();
        }
        static void Add(List<int> list)
        {
            list.Add(2);
            Console.WriteLine("函数内部的引用变量-------");
            foreach (var item in list)
            {
                Console.WriteLine(item);
            }
           
        }
  • 引用参数(ref修饰符)---值类型

引用参数并不创建变量的副本,引用参数和实际变量指向内存中同一个位置,

        static void Main(string[] args)
        {
            int a0 = 1;
            Add(ref a0);
            Console.WriteLine("函数外部a:{0}",a0);    //函数外部a:3                 
            Console.ReadKey();
        }

        static void Add(ref int a)
        {           
            a +=2;
            Console.WriteLine("函数内部a:{0}", a);//函数内部a:3
        }
  • 引用参数(ref)---引用类型

引用类型并不创建变量的副本,变量和参数指向同一个地址,当参数地址改变后,变量地址也会跟着变化。

  static void Main(string[] args)
        {
            string a0 = "Hello ";         
            Add(ref a0);
            Console.WriteLine("函数外部a:{0}",a0);    //函数内部a:Hello Word                 
            Console.ReadKey();
        }     
        static void Add(ref string a)
        {
            string a0 = a;        
            a += "Word";           
            Console.WriteLine("函数内部a:{0}", a);//函数外部a:Hello Word 
        }
  • 比较传值参数和引用参数

比较上下文中两个函数,传值参数:在函数内部中改变参数的引用地址,外部变量的引用地址不会改变;引用参数:在函数内部改变参数的引用地址,外部变量地址也发生改变。即,传值参数使用的是变量的副本,而引用参数使用的是变量。

static void Main(string[] args)
        {
            string a0 = "Hello ";         
            Add( a0);
            Console.WriteLine("函数外部a:{0}",a0);  //函数外部a:Hello               
            Console.ReadKey();
        }     
        static void Add( string a)
        {
            string a0 = a;        
            a += "Word";           
            Console.WriteLine("函数内部a:{0}", a);//函数内部a:Hello Word
        }

猜你喜欢

转载自blog.csdn.net/weixin_41707267/article/details/83989153