C# 图解教程 第三章 类型、存储和变量
类型、存储和变量
C#程序是一组类型声明
C程序是一组函数和数据类型
C++程序是一组函数和类
C#程序是一组类型声明
- C#程序或DLL源码是一组一种或多种类型声明
- 对于可执行程序,类型声明中必须有一个包含Main方法的类
- 命名空间是一种把相关类型声明分组并命名的方法
类型是一种模板
可以把类型想象成一个用来创建数据结构的模板。模板本身不是数据结构,但它说明了由该模板构造的对象的特征。
类型由下面的元素定义:
- 名称
- 用于保存数据成员的数据结构
- 一些行为及约束条件
例:short类型和int类型

实例化类型
从类型模板创建实际对象,称为实例化类型
- 实例化类型创建的对象称为类型的实例(对象)
- C#程序中,每个数据项都是某类型的实例。类型可以是语言自带的、BCL或其它库提供的,或是程序员定义的

数据成员和函数成员
- 数据成员:保存了与这个类的对象或作为一个整体的类相关的数据
- 函数成员:执行代码。函数成员定义类型的行为

预定义类类型
C#提供16种预定义类型,包括13种简单类型和3种非简单类型
- 简单类型
- 11种数值类型
- 不同长度的有符号和无符号整数类型
- 浮点数的float和double
- 高精度小数类型decimal(常用于货币计算)
- 一种Unicode字符类型 char
- 一种bool类型,布尔值只能为true或false
- 11种数值类型
- 非简单类型
- string Unicode字符数组
- object 所有其他类型的基类
- dynamic 使用动态语言编写程序集时使用

所有的预定义类型都直接映射到底层的.NET类型。C#类型名称就是.NET类型的别名,
所以可以使用.NET类型名称替代C#类型名,但不鼓励这样做。


用户定义类型
用户可以自定义6种类型
- class 类类型
- struct 结构类型
- array 数组类型
- enum 枚举类型
- delegate 委托类型
- interface 接口类型
类型通过类型声明创建,类型声明包含以下信息
- 要创建类型的种类
- 新类型名称
- 类型中每个成员的声明(array和delegate除外,它们不含命名成员)

栈和堆
程序运行时,他的数据必须存储在内存中。一个数据需要多大内存,存储在什么地方,以及如何存储都依赖于该数据项的类型。
运行中程序使用两个内存区域来存储数据:栈和堆
栈
栈是一个LIFO(Last-In First-Out,后进先出)的内存数组。
栈存储以下几种类型数据
- 某些类型变量的值
- 程序当前的执行环境
- 传递给方法的参数
栈的特征
- 数据只能从栈的顶端插入或删除
- 把数据放到栈顶称为入栈(push)
- 从栈顶删除数据称为出栈(pop)

堆
在堆里可以分配大块内存来存储某类型的数据对象。
与栈不同,堆里的内存能以任意顺序存入或移除。 
CLR的GC(Garbage Collector,垃圾收集器)自动删除堆上不再访问的数据。

值类型和引用类型
- 值类型只需要一段单独的内存。
- 引用类型需要两段内存
- 第一段存储实际数据,它总是位于堆中
- 第二段是一个引用,指向数据在堆中的存放位置

存储引用类型对象的成员
如果数据是另一个对象的成员,那么它的存储会有些不同
- 引用类型对象的数据部分始终存放在堆里
- 值类型对象,或引用类型数据的引用部分可以存在堆里,也可以存在栈里,这取决于实际情况
对于一个引用类型,其实例的数据部分始终存放在堆里

C#类型的分类

变量
变量允许程序存取数据
- 变量是一个名称,表示程序执行时存储在内存中的数据
- C#提供4种变量

静态类型和dynamic关键字
每个变量都有变量类型,这样编译器就可以确定运行时需要的内存总量以及哪些部分应该存在栈上,哪些存在堆上。
变量类型在编译时就确定且不能在运行时修改,这叫静态类型。
dynamic代表一个特定的、实际的C#类型,它知道如何在运行时解析自身。
可空类型
某些情况下,特别是使用数据库时,你希望表示变量目前未保存有效的值(数据库中的null)。
对于引用类型,你可以直接把变量设置为null,但值类型不行。
可空类型允许创建可以标记为有效或无效的值类型
int? i =;
double? d1 =3.14;
bool? flag =null;
char? letter ='a';
int?[] arr =newint?[];
C# 图解教程 第三章 类型、存储和变量的更多相关文章
- 【卷土重来之C#学习笔记】(三) 类型 存储和变量
.c#程序是一组类型声明 ※C#程序或DLL的源代码是一组一种或多种类型声明 ※对于可执行程序,类型声明必须有一个包含Main方法类 ※命名空间是一种把相关的类型声明分组并命名的方法.既然程序是一组相 ...
- [ABP教程]第三章 创建、更新和删除图书
Web应用程序开发教程 - 第三章: 创建,更新和删除图书 关于本教程 在本系列教程中, 你将构建一个名为 Acme.BookStore 的用于管理书籍及其作者列表的基于ABP的应用程序. 它是使用以 ...
- [Learn Android Studio 汉化教程]第三章:使用 Android Studio 编程
[Learn Android Studio 汉化教程]第三章:使用 Android Studio 编程 本章包含如何在 Android Studio 中书写或生成代码. Android Studio ...
- Objective-C 基础教程第三章,面向对象编程基础知
目录 Objective-C 基础教程第三章,面向对象编程基础知 0x00 前言 0x01 间接(indirection) 0x02 面向对象编程中使用间接 面向过程编程 面向对象编程 0x03 OC ...
- Javascript权威指南——第二章词法结构,第三章类型、值和变量,第四章表达式和运算符,第五章语句
第二章 词法结构 一.HTML并不区分大小写(尽管XHTML区分大小写),而javascript区分大小写:在HTML中,这些标签和属性名可以使用大写也可以使用小写,而在javascript中必须小写 ...
- Blend4精选案例图解教程(三):一键拖拽
原文:Blend4精选案例图解教程(三):一键拖拽 拖拽效果,常规实现方法是定义MoveLeftDwon.MoveLeftUp.MouseMove事件,在Blend的世界里,实现对象的拖拽,可以不写一 ...
- 《JS权威指南学习总结--第三章类型、值和变量》
第三章 类型.值和变量 内容要点 一.数据类型 1.在编程语言中,能够表示并操作的值的类型称做数据类型 2.JS的数据类型分为两类: 原始类型:数字.字符串和布尔值 对象类型 3.JS中有两个特殊的原 ...
- javascript进阶教程第三章--匿名和闭包--案例实战
javascript进阶教程第三章--匿名和闭包--案例实战 一.学习任务 通过几个小练习回顾学过的知识点 二.实例 练习1: 实例描述:打开页面后规定时间内弹出一个新窗口,新窗口指定时间后自动关闭. ...
- C#_02.12_基础二_.NET类型存储和变量
C#_02.12_基础二_.NET类型存储和变量 一.核心一句:C#程序是一组类型声明(留待后面慢慢体会,现在不是很理解,不强说了) 二.数据类型: 1.预定义了16种数据类型: 其中13种简单数据类 ...
随机推荐
- POJ 2154 Color [Polya 数论]
和上题一样,只考虑旋转等价,只不过颜色和珠子$1e9$ 一样的式子 $\sum\limits_{i=1}^n m^{gcd(i,n)}$ 然后按$gcd$分类,枚举$n$的约数 如果这个也化不出来我莫 ...
- Heartbeat实现热备
1.环境准备:1)主节点:master eth0:192.168.0.201 eth1:192.168.0.03 2)备节点:slave eth0 :192.168.0.215 eth1:192.16 ...
- 使用sed修改配置项的值
起先我的想法是根据等号来求得配置项所在的行号, sed -n '/aaa/=' config.ini 然后根据行号删除这一行,再增加一行比如行号是9 sed -i '9d' config.ini s ...
- 2018/2/14 设计模式学习笔记(一) 自己实现ArrayList,LinkedList和Iterator,以及在此过程中对于面向对象,面向接口,还有抽象类的一些思考感悟
因为本人目前为止学习编程不过七个月,所以后面的感悟对于一些大神来说可能嗤之以鼻,但对于一些刚刚入门的萌新来说在理解面向对象的思想上,以及抽象类和接口应该怎么设计等方面应该还是会有所帮助的 首先我们定义 ...
- java设计模式在公众号的应用——我是一个快乐的单例
终于可以休息了,寻一把躺椅,安置于庭院,携一壶好茶,品一番风轻云淡... 自由自在的呼吸,伸手即可触摸阳光的温度,此时此刻,我就是我,像一个单例. 想起『设计模式』,就像想起了很久很久以前的故事,今日 ...
- Python学习-使用opencv-python提取手掌和手心及部分掌纹
上次我们成功训练了手掌识别器http://www.cnblogs.com/take-fetter/p/8438747.html,可以成功得到识别的结果如图 接下来需要使用opencv来获取手掌,去除背 ...
- 在阿里云上搭建 Spark 实验平台
在阿里云上搭建 Spark 实验平台 Hadoop2.7.3+Spark2.1.0 完全分布式环境 搭建全过程 [传统文化热爱者] 阿里云服务器搭建spark特别坑的地方 阿里云实现Hadoop+Sp ...
- 洛谷 P4016负载平衡问题【费用流】题解+AC代码
洛谷 P4016负载平衡问题 P4014 分配问题[费用流]题解+AC代码 负载平衡问题 题目描述 GG 公司有n个沿铁路运输线环形排列的仓库,每个仓库存储的货物数量不等.如何用最少搬运量可以使 n ...
- 940D Alena And The Heater
传送门 题目大意 给出两个长度为N的数组A,B,以及一种计算规律: 若t[i]=1,需满足t[i-1]=t[i-2]=t[i-3]=t[i-4]=0,以及max{A[i],A[i-1],A[i-2], ...
- 读取Pdm文件内容(含源码)
Pdm文件,就是PowerDesigner软件生成的文件,用来设计数据库表结构非常适合.其实,它的文件存储格式就是Xml,网上有很多代码,可以读取pdm文件内容.代码可以使用,但一般只能读取简单的pd ...