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

推荐订阅源

月光博客
月光博客
J
Java Code Geeks
F
Fortinet All Blogs
Blog — PlanetScale
Blog — PlanetScale
P
Proofpoint News Feed
U
Unit 42
B
Blog
宝玉的分享
宝玉的分享
腾讯CDC
Microsoft Azure Blog
Microsoft Azure Blog
酷 壳 – CoolShell
酷 壳 – CoolShell
Last Week in AI
Last Week in AI
博客园 - Franky
博客园 - 三生石上(FineUI控件)
人人都是产品经理
人人都是产品经理
Martin Fowler
Martin Fowler
博客园_首页
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
云风的 BLOG
云风的 BLOG
L
LangChain Blog
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
Y
Y Combinator Blog
The GitHub Blog
The GitHub Blog
博客园 - 叶小钗

博客园 - 小居工作室

七牛云存储客户端(本人开发,开源) 如鹏网 net高级技术 第二章 委托和事件(复习) 如鹏网 net高级技术 第一章 各种知识点(复习) 写个QuartzHelper类 Pdf File Writer 中文应用(PDF文件编写器C#类库) 如鹏网 静态Web开发 第五章:JQuery 如鹏网 静态Web开发 第四章:JSDom 如鹏网 静态Web开发 第三章:Javascript 如鹏网 静态Web开发 第二章:css 如鹏网 静态Web开发 第一章:html 如鹏网.Net三层架构 第四章代码生成器 如鹏网.Net三层架构 第三章MD5和NPOI使用 如鹏网.Net三层架构第二章登录和会员管理 如鹏网.Net三层架构第一章三层基础 如鹏网.Net高级技术9.XML文件操作 如鹏网.Net高级技术8.反射 如鹏网.Net高级技术6.正则表达式 如鹏网.Net高级技术7.委托、事件 如鹏网.Net高级技术5.泛型集合及键值对 如鹏网.Net高级技术4.String特点及常用方法
如鹏网.Net高级技术3.值类型和引用类型
小居工作室 · 2016-03-04 · via 博客园 - 小居工作室

.Net高级技术3.值类型和引用类型

C#中哪些类型属于值类型,哪些类型属于引用类型,

什么是装箱,什么是拆箱?

了解结构体,ref和out使用。

以上都是该段课程中需要掌握的内容。

什么是值类型:值类型均隐式派生自System.ValueType   :类型 变量名=初始化值;

 int num=90; num.GetType().Basetype()

值类型有哪些:数值类型、bool、结构、枚举查看IL,隐式继承自ValueType

什么是引用类型:引用类型派生自System.Object

引用类型有哪些:字符串、数组、类、接口等查看IL隐式继承自Object ;

 引用类型变量的赋值只复制对对象的引用。

值类型变量赋值会拷贝一个副本。

值类型只在栈中存储,引用类型的变量名是存储在栈内存中,new 对象存储在堆内存中。

栈内存:值类型,变量名

堆内存:new 类

装箱和拆箱是怎么回事?前后类型必须一样

IL 中 有box 就发生了装箱,有unbox就发生了拆箱

有没有发生装箱,首先看有没有继承关系,int 和string之间没有继承类型

装箱在值类型向引用类型转换时发生(两者有明确的继承关系)

拆箱在引用类型向值类型转换时发生(两者有明确的继承关系)

-------------------------------------------------

结构体 :省空间可以使用。

在没有面向对象、在没有类的情况下如何组织一些相关的数据?

结构体: 一种值类型,拷贝副本。

注意: 对于结构,不像类那样存在继承。一个结构不能从另一个结构或类继承。但是,结构从基类 Object 继承。

结构只能实现接口,其方式同类完全一样;不能继承。

结构体是值类型,传值的时候拷贝的是副本

对于结构,不像类那样存在继承。

一个结构不能从另一个结构或类继承。但是,结构从基类 Object 继承(有object类的方法)。

结构可实现接口,其方式同类完全一样。

结构体大家了解即可。

-------------------------------------------------

 ref 和out使用:

1、使用ref型参数时,传入的参数必须先被初始化。对out而言,必须在方法中对其完成初始化。 2、使用ref和out时,在方法的参数和执行方法时,都要加ref或out关键字。以满足匹配。 3、out适合用在需要retrun多个返回值的地方, 而ref则用在需要被调用的方法修改调用者的引用的时候。

 ref :

  可以把值传到方法中,也可以把方法中的值返回来---〉可进可出的

  传入的参数必须先初始化。

当参数个数 和类型一样时,只是ref 和 out 是不能构成重载的 。

使用ref传参数的时候,传入的参数必须先被初始化。

out:

  把方法中的值传出去,外面调用变量可以没有初始值。

使用out传参数的时候,必须在方法中对其完成初始化。 

使用ref和out时,在方法的参数和执行方法时,都要加ref或out关键字。以满足匹配。 

out适合用在需要retrun多个返回值的地方,

而ref则用在需要被调用的方法修改调用者的引用的时候。

  案例:

    int n;

    int.TryParse("sf",out n);

    Console.WriteLine(n); //0默认值

如鹏网:http://www.rupeng.com