C# 方法内的参数 引用类型与值类型的一些理解

来源:互联网 发布:镜片蓝膜绿膜区别 知乎 编辑:程序博客网 时间:2024/05/29 17:39

  C#内的方法内的参数有值类型和引用类型的区别

  在参数前用ref 或 out修饰后,参数就变为引用类型传递了。 

   原先赋值过的变量会在调用这个方法后变化。 

 我的理解是值传递时候,调用方法的参数时候,复制了一份,然后使用。 而引用传递时候,是直接把变量的地址传递给了方法,直接改变那些变量。


   参数如果是类、结构体的时候。

   用一段测试程序说明下:

using System;using System.Collections.Generic;using System.Linq;using System.Text;namespace yinyongChuangdi{    class Program    {        static void Main(string[] args)        {            People lisa = new People() { id = 5 };            Console.WriteLine("新建一个People为Lisa");            Console.WriteLine("Lisa的id为:" + lisa.id);            change(lisa);            Console.WriteLine("change后");            Console.WriteLine("Lisa的id为:"+lisa.id);            change2(lisa);            Console.WriteLine("change2后");            Console.WriteLine("Lisa的id为:" + lisa.id);            Console.WriteLine();            Pirate jack = new Pirate() { id = 1 };                                Console.WriteLine("新建一个Pirate为jack");            Console.WriteLine("jack的id为:" + jack.id);            cc(jack);            Console.WriteLine("cc后");            Console.WriteLine("jack的id为:" + jack.id);            cc2(jack);            Console.WriteLine("cc2后");            Console.WriteLine("jack的id为:" + jack.id);            Console.ReadLine();        }        static void change(People ll)        {                        ll.id = 3;        }        static void change2(People ll2)        {            ll2 = new People();            ll2.id = 2;        }        static void cc(Pirate aa)        {            aa.id = 100;        }        static void cc2(Pirate aa2)        {            aa2 = new Pirate();            aa2.id = 200;        }    }    class People    {        public int id{get;set;}    }    struct Pirate    {        public int id;           }}


输出结果为:



lisa是一个类,引用类型,

change方法参数是类名,方法体内没有new这个类,它改变了lisa的id。

change2方法内new了下,重新new了一个类,改变id的新建的id。不影响lisa原本id。


jack是个结构体。

从上面看,不管怎么搞,原来是多少,就是多少。

当然, 如果你的结构体内有引用变量的话,这就看你方法体内有没有new了,没new会变,new了就不变。我上面例子里只是个int值变量哦。 


你要加了ref的话,那都会变啦。

ok,先这些了。