《C#图解教程》读书笔记之二:存储、类型和变量
2014-04-29 17:26
267 查看
本篇已收录至《C#图解教程》读书笔记目录贴,点击访问该目录可获取更多内容。
(2)类型是一种模板:模板本身不是数据结构,但它详细说明了由该模板构造的对象的特征;
(3)C#提供了16种预定义类型:13种简单类型(数值类型:int,float,double,decimal等;非数值类型:bool,char),3种非简单类型(object,string,dynamic);
所有的预定义类型都直接映射到底层的.NET类型。C#的类型名称其实就是.NET类型的别名,所以使用.NET的类型名称也符合C#语法,不过并不鼓励这样做。在C#程序中,应当尽量使用C#类型名称而不是.NET类型名称;
(4)除了上面提到的16种预定义类型外,还可以创建自己的用户定义类型,一共有6种用户定义类型可以由用户自己创建,它们是:类(Class)、结构体(Struct)、数组(Array)、枚举(Enum)、委托(Delegate)和接口(Interface);
![](http://images.cnitblog.com/i/381412/201404/291636337678025.jpg)
(2)栈存储几种类型的数据:某些类型变量的值(主要是值类型);程序当前的执行环境;传递给方法的参数;
(3)栈具有几种显著的特征:数据只能从栈顶插入和删除;将数据放到栈顶叫做入栈;将数据从栈顶移除叫做出栈;
![](http://images.cnitblog.com/i/381412/201404/291652382676086.jpg)
(2)堆中的数据不能显示地删除,CLR中的自动GC(Garbage Collector,垃圾收集器)会自动清除无主(判断程序代码是否将不再访问某数据项的时候)的堆内存对象。因此,我们可以骄傲地说:妈妈再也不用担心我的垃圾了。
![](http://images.cnitblog.com/i/381412/201404/291719487051028.jpg)
(2)引用类型:需要两段内存,第一段存储实际的数据,它总是位于堆中;第二段是一个引用,指向数据在堆中的存放位置;TIP:对于引用类型,实际数据存放在堆里,而引用存放在栈里。(object,string,dynamic,class,interface,delegate,array)
![](http://images.cnitblog.com/i/381412/201404/291720045648740.jpg)
(3)引用类型对象的数据始终存放在堆里,无论它们是值类型还是引用类型。
![](http://images.cnitblog.com/i/381412/201404/291722522524635.jpg)
![](http://images.cnitblog.com/i/381412/201404/291710276429952.jpg)
作者:周旭龙
出处:http://www.cnblogs.com/edisonchou/
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文链接。
一、类型初窥:掀起你的盖头来
(1)C程序是一组函数和数据类型,C++程序是一组函数和类,而C#程序是一组类型声明;(2)类型是一种模板:模板本身不是数据结构,但它详细说明了由该模板构造的对象的特征;
(3)C#提供了16种预定义类型:13种简单类型(数值类型:int,float,double,decimal等;非数值类型:bool,char),3种非简单类型(object,string,dynamic);
所有的预定义类型都直接映射到底层的.NET类型。C#的类型名称其实就是.NET类型的别名,所以使用.NET的类型名称也符合C#语法,不过并不鼓励这样做。在C#程序中,应当尽量使用C#类型名称而不是.NET类型名称;
(4)除了上面提到的16种预定义类型外,还可以创建自己的用户定义类型,一共有6种用户定义类型可以由用户自己创建,它们是:类(Class)、结构体(Struct)、数组(Array)、枚举(Enum)、委托(Delegate)和接口(Interface);
二、存储双雄:栈和堆
2.1 栈
(1)栈是一个内存数组,是一个LIFO(Last In First Out,后进先出)的数据结构。![](http://images.cnitblog.com/i/381412/201404/291636337678025.jpg)
(2)栈存储几种类型的数据:某些类型变量的值(主要是值类型);程序当前的执行环境;传递给方法的参数;
(3)栈具有几种显著的特征:数据只能从栈顶插入和删除;将数据放到栈顶叫做入栈;将数据从栈顶移除叫做出栈;
2.2 堆
(1)堆是一块内存区域,在堆里可以分配大块的内存用于存储某类型(主要是引用类型)的数据对象;与栈不同,堆里的内存能够以任意的顺序插入或移除;![](http://images.cnitblog.com/i/381412/201404/291652382676086.jpg)
(2)堆中的数据不能显示地删除,CLR中的自动GC(Garbage Collector,垃圾收集器)会自动清除无主(判断程序代码是否将不再访问某数据项的时候)的堆内存对象。因此,我们可以骄傲地说:妈妈再也不用担心我的垃圾了。
三、值类型和引用类型:屌丝和高富帅
(1)值类型:只需要一段单独的内存,用于存储实际的数据;TIP:对于值类型,数据存放在栈里;(byte,int,long,float,double,struct,enum等)![](http://images.cnitblog.com/i/381412/201404/291719487051028.jpg)
(2)引用类型:需要两段内存,第一段存储实际的数据,它总是位于堆中;第二段是一个引用,指向数据在堆中的存放位置;TIP:对于引用类型,实际数据存放在堆里,而引用存放在栈里。(object,string,dynamic,class,interface,delegate,array)
![](http://images.cnitblog.com/i/381412/201404/291720045648740.jpg)
(3)引用类型对象的数据始终存放在堆里,无论它们是值类型还是引用类型。
![](http://images.cnitblog.com/i/381412/201404/291722522524635.jpg)
四、本章思维导图
![](http://images.cnitblog.com/i/381412/201404/291710276429952.jpg)
附件
思维导图(jpg、mmap以及pdf文件)下载:http://pan.baidu.com/s/1jGjzqnW作者:周旭龙
出处:http://www.cnblogs.com/edisonchou/
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文链接。
相关文章推荐
- C#常见算法题目
- c# windows 服务学习
- c# log4net在项目中使用实例
- C# Winform中执行post操作并获取返回的XML类型的数据
- C#将image中的显示的图片转换成二进制
- C#中创建、打开、读取、写入、保存Excel的一般性代码
- C# 模拟POST提交(根据URL地址,参数以xml形式传递)
- C#实现快速排序算法
- 如何使用 Visual C# 2005 或 Visual C# .NET 向 Excel 工作簿传输数据
- 常见的C# WEb页面的编码格式设置
- C#必须加某QQ群才能使用软件
- C# Socket简单例子(服务器与客户端通信)
- C# Socket服务器通讯
- C#函数式程序设计之泛型
- c# winform 循环遍历界面上的所有控件,foreach,Controls,AllowDrop
- 树控件TreeView的一些基本操作
- C#操作Excel(创建、打开、读写、保存)几种方法的总结
- C#将EXCEL表中的每个表单独保存到本地
- C#web身份证读卡器,将base64位字以图片格式保存在服务器
- 树控件TreeView