博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
引用类型与值类型在编码上的区别
阅读量:7082 次
发布时间:2019-06-28

本文共 1682 字,大约阅读时间需要 5 分钟。

一、引入类型与值类型简介

  值类型:直接存放于栈中,取的时候是直接取得值。值类型继承自System.ValueType。(自定义对象)

  引用类型:存在于托管堆中,取的时候是从栈取该对象的地址,然后用这个地址去托管堆中取值。引用类型继承自System.Object。(int,bool,struct)

二、在代码编写上的区别

  在赋值的时候,值类型是复制一份,新的和旧的在以后的操作中互不影响,而引用类型复制的只是地址,在以后的修改中,修改新的旧的也会受到影响。

  代码示例:

static void Main(string[] args)    {        List
ListPerson = new List
(); ListPerson.Add(new Person(){ Name="刘备" }); ListPerson.Add(new Person(){ Name="关羽" }); List
ListPerson2 = ListPerson.Where(m => m.Name == "刘备").ToList(); ListPerson2[0].Name = "曹操"; foreach(Person p in ListPerson) { Console.WriteLine(p.Name); //输出曹操 关羽 (对于刚开始Name="刘备的Person",只存在一份,怎么改,改的都是那个) } List
ListInt = new List
(); ListInt.Add(1); ListInt.Add(2); List
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传参了。俗称,引用传递。

 

转载地址:http://bhlml.baihongyu.com/

你可能感兴趣的文章
解: Eclipse+pydev中文显示
查看>>
我的友情链接
查看>>
react+react-router+redux+react-redux构建一个简单应用
查看>>
shell编程学习之sed
查看>>
Python学习笔记(2)--Python的安装
查看>>
使用cygwin/openSSH搭建windows下的SSH服务器
查看>>
Ubuntu里网卡IP设置的步骤&/etc/passwd文件
查看>>
排序规则引起的冲突问题
查看>>
onTouch事件传递机制
查看>>
那些年的坑--双精度数值转成整形
查看>>
宽依赖、窄依赖
查看>>
好程序员web前端系列之CSS3-3D
查看>>
xm 命令详解
查看>>
HttpClient4.x send json request
查看>>
mysql5.6基于GTID的主从复制
查看>>
iOS 获取Wifi的SSID及MAC地址
查看>>
认识六个被误解的Ruby特性
查看>>
Java线程:并发协作-生产者消费者模型
查看>>
libvirt API非阻塞调用及相关的原理分析
查看>>
老男孩第十四期Python学习班之Day06
查看>>