惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

C
Cyber Attacks, Cyber Crime and Cyber Security
P
Palo Alto Networks Blog
I
Intezer
L
Lohrmann on Cybersecurity
K
Kaspersky official blog
Know Your Adversary
Know Your Adversary
Latest news
Latest news
Exploit-DB.com RSS Feed
Exploit-DB.com RSS Feed
N
News and Events Feed by Topic
Recent Announcements
Recent Announcements
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
NISL@THU
NISL@THU
W
WeLiveSecurity
J
Java Code Geeks
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
Project Zero
Project Zero
月光博客
月光博客
量子位
N
News | PayPal Newsroom
阮一峰的网络日志
阮一峰的网络日志
Microsoft Azure Blog
Microsoft Azure Blog
I
InfoQ
CTFtime.org: upcoming CTF events
CTFtime.org: upcoming CTF events
S
Securelist
T
Tenable Blog
博客园 - 聂微东
V2EX - 技术
V2EX - 技术
宝玉的分享
宝玉的分享
N
Netflix TechBlog - Medium
www.infosecurity-magazine.com
www.infosecurity-magazine.com
爱范儿
爱范儿
GbyAI
GbyAI
Webroot Blog
Webroot Blog
S
Security Affairs
The Cloudflare Blog
Recorded Future
Recorded Future
P
Privacy & Cybersecurity Law Blog
Google DeepMind News
Google DeepMind News
C
CERT Recently Published Vulnerability Notes
Microsoft Security Blog
Microsoft Security Blog
Y
Y Combinator Blog
A
About on SuperTechFans
C
Cisco Blogs
TaoSecurity Blog
TaoSecurity Blog
Help Net Security
Help Net Security
S
SegmentFault 最新的问题
cs.CV updates on arXiv.org
cs.CV updates on arXiv.org
Simon Willison's Weblog
Simon Willison's Weblog
V
Vulnerabilities – Threatpost
L
LINUX DO - 热门话题

博客园 - 牛奶哥

C#点滴 - 深拷贝与浅拷贝 C#点滴 - 抽象类与接口区别 C#点滴 - ?与?? C#点滴 - 类型转换 C#点滴 - 关于String C#点滴 – 内建基本类型 C#点滴 – CLR, CTS…等等基本概念 SharePoint 2010 学习资料 初学SilverLight - (3)简单布局 初学SilverLight - (2)第一个SilverLight程序 初学SilverLight - (1)开发环境准备 WCF热带鱼书学习手记 - Security (1) 概述 关于在SharePoint中管理大文件的一些想法 WCF热带鱼书学习手记 - Service Contract Overload WCF热带鱼书学习手记 - client coding WCF热带鱼书学习手记 - metadata WCF热带鱼书学习手记 - endpoint - 牛奶哥 WCF热带鱼书学习手记 - ABC WCF热带鱼书学习手记 - Host Type - 牛奶哥
C#点滴 - 值类型与引用类型
牛奶哥 · 2010-03-26 · via 博客园 - 牛奶哥

1. 所有对象都继承自System.Object,而所有的值类型都继承自System.ValueType。也就是说,System.ValueType重写了System.Object的方法使得值类型的操作是基于值而不是基于引用。

2. 值类型内存分配在栈上,引用类型内存分配在托管堆中。内存分配在这两个地方的区别在于:如果超出了值类型定义的范围,值类型分配的内存会立刻从内存中清除,即它的内存生命周期是可以预测的。而引用类型分配在托管堆中,内存管理有垃圾处理器控制,不可预知其生命周期。

3. 赋值操作

值类型赋值操作是会依次copy所有成员变量的值。引用类型仅仅是地址重定向。

4. 参数传递

默认为值传递,即参数为值类型是传递值类型的值副本,参数为引用类型时传递引用类型地址值副本。但当参数使用out或者ref关键字是,传递的是引用本身。但是在使用ref,需要注意一些区别:

  • 当参数为引用类型时,不使用ref关键字,方法还是可以通过传入的引用改变其所指向的实例,但是不能改变引用本身。
  • 当参数为引用类型时,同时使用ref关键字,方法可以通过传入的引用改变其所指向的实例,并且改变引用本身。

5. 值类型是sealed的,不能继承

6. 值类型不能写Finalize()方法,该方法用于堆上的内存回收。

7. 装箱与拆箱

装箱 - 把值类型转换为引用类型。

拆箱 - 把引用类型转换为值类型。

作用:可以把值类型也看作是对象。最常使用的情况是在集合操作的时候,大多数方法接口都接收一个对象参数(object)。当传入值类型时,.NET会自动处理装箱细节,把值类型转变为引用类型。从集合取出时,把引用类型的值取出放回值类型变量。

缺点:性能上有损失。并且缺少类型安全保证。.NET 2.0推出了泛型 基本上能解决这个问题。