C# 引用类型与值类型在编码上的区别
2014-05-16 14:13
330 查看
一、引入类型与值类型简介
值类型:直接存放于栈中,取的时候是直接取得值。值类型继承自System.ValueType。(自定义对象)引用类型:存在于托管堆中,取的时候是从栈取该对象的地址,然后用这个地址去托管堆中取值。引用类型继承自System.Object。(int,bool,struct)
二、在代码编写上的区别
在赋值的时候,值类型是复制一份,新的和旧的在以后的操作中互不影响,而引用类型复制的只是地址,在以后的修改中,修改新的旧的也会受到影响。代码示例:
static void Main(string[] args) { List<Person> ListPerson = new List<Person>(); ListPerson.Add(new Person(){ Name="刘备" }); ListPerson.Add(new Person(){ Name="关羽" }); List<Person> ListPerson2 = ListPerson.Where(m => m.Name == "刘备").ToList(); ListPerson2[0].Name = "曹操"; foreach(Person p in ListPerson) { Console.WriteLine(p.Name); //输出曹操 关羽 (对于刚开始Name="刘备的Person",只存在一份,怎么改,改的都是那个) } List<int> ListInt = new List<int>(); ListInt.Add(1); ListInt.Add(2); List<int> ListInt2 = ListInt.Where(m => m > 1).ToList(); ListInt2[0] = 5; foreach (int i in ListInt) { Console.WriteLine(i); //输出1 2 值类型,改变了ListInt2[0]的那个值,就只是改变了那个值,对原有List没影响 } Console.ReadKey(); }
示例2:
static void Main(string[] args) { int i = 1; geti(i); Console.WriteLine(i); //输出 1 Person p = new Person() { Name = "琴" }; getP(p); Console.WriteLine(p.Name); //输出 琴琴 Console.ReadKey(); } public static void getP(Person p) { p.Name = p.Name + p.Name; } public static void geti(int i) { i = i + i; }
引用类型由于调用参数时传递的是地址,所以对这个地址的修改会影响到原有对象。如果希望值类型与引用类型一样也有影响,那么就只有用ref传参了。俗称,引用传递。
相关文章推荐
- 彻底理解C#中值类型和引用类型的区别
- C#值类型和引用类型的区别
- 实际举例C#引用类型和值类型的区别(转)
- [转载]实际举例C#引用类型和值类型的区别
- C# 值类型 引用类型 作为参数传递区别
- C#引用类型和值类型的区别
- 复习一下基础:'C# 值类型和引用类型 以及作为方法参数的区别'
- C# 引用类型和值类型的区别
- C#引用类型和值类型的区别
- [C#] 值类型与引用类型的区别?
- 彻底理解C#中值类型和引用类型的区别
- C#引用类型和值类型的区别
- 彻底理解C#中值类型和引用类型的区别
- 理解C#中值类型和引用类型的区别
- [C#] 值类型与引用类型的区别?
- 实际举例C#引用类型和值类型的区别
- C#中值类型和引用类型的区别
- C#引用类型和值类型的区别
- 实际举例C#引用类型和值类型的区别
- 实际举例C#引用类型和值类型的区别