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

推荐订阅源

U
Unit 42
GbyAI
GbyAI
人人都是产品经理
人人都是产品经理
T
Tor Project blog
Google DeepMind News
Google DeepMind News
The Register - Security
The Register - Security
爱范儿
爱范儿
雷峰网
雷峰网
MongoDB | Blog
MongoDB | Blog
Vercel News
Vercel News
美团技术团队
博客园 - 三生石上(FineUI控件)
D
DataBreaches.Net
L
LangChain Blog
IT之家
IT之家
博客园_首页
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
Last Week in AI
Last Week in AI
博客园 - 【当耐特】
T
Tailwind CSS Blog
M
MIT News - Artificial intelligence
P
Proofpoint News Feed
Hacker News: Ask HN
Hacker News: Ask HN
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
量子位
Project Zero
Project Zero
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
博客园 - 聂微东
T
Tenable Blog
aimingoo的专栏
aimingoo的专栏
P
Proofpoint News Feed
T
Threat Research - Cisco Blogs
D
Darknet – Hacking Tools, Hacker News & Cyber Security
Cyberwarzone
Cyberwarzone
C
CERT Recently Published Vulnerability Notes
Microsoft Azure Blog
Microsoft Azure Blog
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
博客园 - 叶小钗
Know Your Adversary
Know Your Adversary
L
Lohrmann on Cybersecurity
C
Cisco Blogs
cs.AI updates on arXiv.org
cs.AI updates on arXiv.org
Schneier on Security
Schneier on Security
I
InfoQ
P
Privacy & Cybersecurity Law Blog
Spread Privacy
Spread Privacy
Martin Fowler
Martin Fowler
腾讯CDC
S
Security @ Cisco Blogs
F
Fortinet All Blogs

博客园 - 牛奶哥

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推出了泛型 基本上能解决这个问题。