C# 值类型与引用类型的详解
值类型与引用类型分这几种情况:
1.内存分为堆和栈,值类型的数据存储在栈中,引用类型的数据存储在堆中。
2.int numb=10,代码中的10是值类型的数据,numb只是一个指向10的变量而已。其中10存储在栈中,变量numb也存储在栈中。
3.Person p=new Person(),代码中 new Person()所创建的对象存储在堆中,变量p存储在栈中。
4.综合第2点和第3点所有变量都存储在栈中,无论此变量存储的值是值类型和引用类型。
5.值类型包括枚举,结构以及像int,datetime这样的简单类型;引用类型包括类,接口,委托等。
6.值类型传递的值的拷贝,引用类型传递的是值的引用,即此数据在内存中的地址,这是最核心的概念,实例展示:
class Program
{
static void Main( string [] args)
{
Person yaohongbo = new Person() { Name = "姚宏波" , Age = 29 };
Person lilei = new Person() { Name = "李雷" , Age = 22 };
int age = yaohongbo.Age;
yaohongbo.Age = 27;
Person zhangsan = lilei;
lilei.Name = "李磊" ;
Console.WriteLine( "yaohongbo的age:" +yaohongbo.Age);
Console.WriteLine( "age:" + age);
Console.WriteLine( "lilei的name:" + lilei.Name);
Console.WriteLine( "zhangsan的name:" + zhangsan.Name);
Console.ReadKey();
}
}
class Person
{
public string Name { get ; set ; } //引用类型
public int Age { get ; set ; } //值类型
}
|
输出结果如下图:
代码说明:yaohongbo.Age是int类型,为值类型,所以代码int age=yaohongbo.Age,是将yaohongbo.Age变量存储的值复制了一份,然后让变量age存储这份拷贝,此拷贝和yaohongbo.Age无任何关系,所以我们才可以看到上面的输出结果。
再看代码:
Person zhangsan = lilei;
lilei.Name = "李磊" ;
|
Person为自定义类,为引用类型,而引用类型穿的是引用,变量zhangsan指向的数据和变量lilei是同一个内存地址,即同一个对象,而不是像值类型那样,拷贝了一份变量lilei指向的数据给变量zhangsan。所以才会出现无论更改zhangsan韩式lilei的属性值,其他一个都会改变的情况。
最后通过一张图来描述上面代码。
转载于:https://www.cnblogs.com/yanyao/p/4827827.html
C# 值类型与引用类型的详解相关推荐
- 设计模式-值类型与引用类型、深拷贝与浅拷贝、原型模式详解
一. 值类型和引用类型 1. 前言 (1). 分类 值类型包括:布尔类型.浮点类型(float.double.decimal.byte).字符类型(char).整型(int.long.short等). ...
- C#详解值类型和引用类型区别
值类型和引用类型的区别 值类型 包括byte,short,int,long,float,double,decimal,char,bool 和 struct ,枚举,可空类型. 值类型变量声明后,不管是 ...
- 值类型与引用类型比较与区别
在.NET中或许我们不用担心内存管理以及垃圾回收器(Garbage Collection GC)的问题,但是我们还是应该了解这些东东以便在必要的时候优化我们程序的性能.而且,如果对内存管理如何工作有所 ...
- C# - 值类型、引用类型走出误区,容易错误的说法
C# - 值类型.引用类型&走出误区,容易错误的说法 1. 值类型与引用类型小总结 1)对于引用类型的表达式(如一个变量),它的值是一个引用,而非对象. 2)引用就像URL,是允许你访问真实信 ...
- python布尔类型运算_Python对象类型及其运算方法(详解)
基本要点: 程序中储存的所有数据都是对象(可变对象:值可以修改 不可变对象:值不可修改) 每个对象都有一个身份.一个类型.一个值 例: >>> a1 = 'abc' >> ...
- sip消息类型和消息代码详解-转
在学习asterisk的时候,经常遇到一些远程服务器传回的代码,这些代码都有很重要的信息,让我们了解到对方的sip是如何响应我们这边的sip消息的,于是网上找到了这些sip消息类型和消息代码,自己收藏 ...
- pyzabbix 删除触发器_zabbix设置邮件报警, Zabbix常用Key值, zabbix触发器表达式详解, zabbix制作自己模板...
zabbix设置邮件报警 方法一:说明此方法,会产生中文乱码问题 第一步:首先安装mailx组件并配置好能够通过三方邮箱发送邮件 yum -y install mailx 然后编辑mailx的配置文件 ...
- FANUC机器人动作指令的定位类型FINE和CNT详解
FANUC机器人动作指令的定位类型FINE和CNT详解 前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家.点击跳转到网站. FANUC机器人的定位类型,即定义动作指令中 ...
- 43. Systemd的Unit配置详解,unit文件位置,优先级,unit类型,unit文件字段详解,Unit/Service/Install字段,添加mysql服务等例子
Systemd的Unit配置详解,unit文件位置和优先级,unit文件类型,unit文件字段详解,[Unit]字段,[Service]字段,[Install]字段,添加服务,创建.service 文 ...
最新文章
- Keras,亡于谷歌?
- 李彦宏的百度 AI 落地战略,由王海峰来实现
- Oracle For 循环添加数据
- animation动画的使用
- Date动态获取时间
- echart旭日图_海报级设计感的旭日图,就在 ECharts 4.0
- Spark Streaming之容错机制以及事务语义
- Linux中,Mysql安装
- 素数在c语言中怎么表示,请问素数怎么样表示
- App Store 审核指南
- 从零做一个小程序(计算器)赚钱
- CCF计算机软件能力认证201809-1卖菜(C语言版)
- [ZJOI2004]沼泽鳄鱼
- python写cdr插件_(如何(用Python)写一个(Lisp)解释器(下))
- 如何让树莓派启动实现图形化界面和命令行模式的切换从而解决两个光标的问题
- 盛大开幕!2019达索系统3D体验高峰论坛……
- 经理人与元老能双赢联动吗?
- 列表4:拼接排序方法实操
- python 图片变换,水平镜像翻转
- SIM:基于搜索的用户兴趣建模
热门文章
- HDFS—常见面试题
- Electron-builder打包安装程序遇到的问题解决方案
- js 判断是否是IE浏览器及ie版本
- 乱谈数学--我理解的函数极限运算
- 从一个帖子看部分大学生的学习心态
- 关于使用spring admin和consul一起做监控需要注意的配置
- 使用PLSQL客户端登录ORACLE时报ORA-12502和ORA-12545错误的解决方案
- django实现图片上传和显示
- 简单的实现图片预览, 通过原生ajax以及 jQuery两种方法实现图片预览,有更好的办法可以留言喔...................
- 测试Open Live Writer