《C#图解教程》读书笔记之二:存储、类型和变量

本篇已收录至《C#图解教程》读书笔记目录贴,点击访问该目录可获取更多内容。

一、类型初窥:掀起你的盖头来

  (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,后进先出)的数据结构。

  (2)栈存储几种类型的数据:某些类型变量的值(主要是值类型);程序当前的执行环境;传递给方法的参数;

  (3)栈具有几种显著的特征:数据只能从栈顶插入和删除;将数据放到栈顶叫做入栈;将数据从栈顶移除叫做出栈

  2.2 堆

  (1)堆是一块内存区域,在堆里可以分配大块的内存用于存储某类型(主要是引用类型)的数据对象;与栈不同,堆里的内存能够以任意的顺序插入或移除;

  (2)堆中的数据不能显示地删除,CLR中的自动GC(Garbage Collector,垃圾收集器)会自动清除无主(判断程序代码是否将不再访问某数据项的时候)的堆内存对象。因此,我们可以骄傲地说:妈妈再也不用担心我的垃圾了

三、值类型和引用类型:屌丝和高富帅

  (1)值类型:只需要一段单独的内存,用于存储实际的数据;TIP对于值类型,数据存放在栈里;(byte,int,long,float,double,struct,enum等)

  (2)引用类型:需要两段内存,第一段存储实际的数据,它总是位于堆中;第二段是一个引用,指向数据在堆中的存放位置;TIP对于引用类型,实际数据存放在堆里,而引用存放在栈里。(object,string,dynamic,class,interface,delegate,array)

  (3)引用类型对象的数据始终存放在堆里,无论它们是值类型还是引用类型。

四、本章思维导图

附件

  思维导图(jpg、mmap以及pdf文件)下载:http://pan.baidu.com/s/1jGjzqnW

作者:周旭龙

出处:http://www.cnblogs.com/edisonchou/

本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文链接。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏阿杜的世界

Java Web技术经验总结(十五)

14230
来自专栏Vamei实验室

Java进阶05 多线程

多线程 多线程(multiple thread)是计算机实现多任务并行处理的一种方式。 在单线程情况下,计算机中存在一个控制权,并按照顺序依次执行指令。单线程好...

23660
来自专栏闪电gogogo的专栏

【数据结构(C语言版)系列三】 队列

队列是一种先进先出的线性表,它只允许在表的一端进行插入,而在另一端删除元素。这和我们日常生活中的排队是一致的,最早进入队列的元素最早离开。在队列中,允许插入的一...

35220
来自专栏Java帮帮-微信公众号-技术文章全总结

【大牛经验】探讨Java的异常与错误处理

探讨Java的异常与错误处理 ENTER TITLE ? Java中的异常处理机制已经比较成熟,我们的Java程序到处充满了异常的可能,如果对这些异常不做预先的...

38660
来自专栏刘望舒

Java虚拟机(二)对象的创建与OOP-Klass模型

前言 在前一篇文章中我们学习了Java虚拟机的结构原理与运行时数据区域,那么我们大概知道了Java虚拟机的内存的概况,那么内存中的数据是如何创建和访问的呢?这篇...

268100
来自专栏佳爷的后花媛

java基础知识

Vector、Stack、HashTable、ConcurrentHashMap、Properties

31750
来自专栏自学笔记

python基本常识

tuple,str都可以看做是一种list,都可以进行切片操作。 利用切片操作,去掉一个字符串的前后空格。要注意是是前后空格是不止一个的,可能有很多个。

40150
来自专栏向治洪

Android热补丁技术—dexposed原理简析(手机淘宝采用方案)

上篇文章《Android无线开发的几种常用技术》我们介绍了几种android移动应用开发中的常用技术,其中的热补丁正在被越来越多的开发团队所使用,它涉及到da...

29060
来自专栏Java技术栈

深度历险:Redis 内存模型详解

Redis 是目前最火爆的内存数据库之一,通过在内存中读写数据,大大提高了读写速度,可以说 Redis 是实现网站高并发不可或缺的一部分。

20820
来自专栏互联网技术栈

《Effective Java 》系列一

编写实例受控类有几个原因。实例受控使得类可以确保他是一个Singleton或者是不可实例化的。他还使得不可变类可以确保不会存在两个相等的实例。

22940

扫码关注云+社区

领取腾讯云代金券