C#值类型与引用类型

来源:互联网 发布:淘宝店铺名称可以修改 编辑:程序博客网 时间:2024/06/08 10:55

引用类型与值类型的区别:

值类型

ref把一个变量以参数的形式带到一个方法中进行改变,再将改变后的值返回(实参和形参在栈中的地址相同);[栈中也是有地址的]

不加ref,形参和实参是两个量,栈中的地址不同


值类型的赋值是复制值

引用类型的赋值是复制的地址

 

static void Main(string[] args)        {            string str1 = "immutable";            string str2;                        str2 = str1;            str2= "another";   // 虽然string是引用类型,但是由于字符串的不可变性,这里str2又指向了新的地址,所以str1与str2的内容分别是“immutable”和“another”,不一样            father fa1 = new father();            fa1.Name = "dad";            father fa2 = new father();            fa2.Name = "Bb";            father fa3 = fa1;    //  这里可以看出fa1赋值给fa3,引用类型的传递            fa1.Name = "father and children";            changle(fa1);//  这里返回的引用类型值发生了改变。            Console.WriteLine("fa1 is content is   {0}",fa1.Name );            Console.ReadKey();        }        public static void changle(father f)       {                                                                // 引用类型传递的是地址            f.Name = "change father's name";                   // 下面这种方式也是传递地址            father ff = f;            ff.Name = "change father's name";        }    }    public class father {        string  _name;        public string Name       {            get { return _name; }            set { _name = value; }        }    }