【C#语言入门】04. 详解类型、变量与对象(上)
一、什么是类型(Type)
- 又叫做数据类型(Data Type)
- A data type is a homogeneous collection of values, effectively presented, equipped with a set of operations which manipulate these values.数据类型是同一种值的集合,这说明数据类型不是凭空捏造出来的,而是先有现实中的一些值之后,再把他们归纳整理出来的,并且每一种数据类型都有只属于他的一套操作运算。
- 是数据在内存中存储的“型号”
- 小内存容纳大尺寸数据会丢失精确度、发生错误
- 大内存容纳小尺寸数据会导致浪费
- 编程语言的数据类型与数学中的数据类型不完全相同(例如3/4=0.75,但在编程语言中3/4=0,因为是int类型)
- 强类型语言与弱类型语言的比较
- 如果编程语言中的编程语言收到数据类型的约束,那就是强类型语言,如果不受约束或者收到的约束不严谨,那就是弱类型语言。
- C#中的dynamic是动态数据类型,类似于弱类型语言
二、类型在C#语言中的作用
- 一个C#类型中所包含的信息有:
- 存储此类型变量所需的内存空间大小
- 此类型的值可表示的最大、最小值范围(一般来说内存空间和值的范围相关联)
- 此类型所包含的成员(如方法、属性、事件等)
- 此类型由什么基类派生而来
- 程序运行的时候,此类型的变量在分配在内存的什么位置
- Stack简介(栈)
- Stack overflow
- Heap简介(堆)(实例永远在堆里)
- 使用Performance Monitor查看进度的堆内存使用量
- 关于内存泄漏
- 此类型所允许的操作(运算)
1. 整数类型表以及浮点类型表
整数类型 | 大小 | 浮点类型 | 大小 |
---|---|---|---|
sbyte | Signed 8-bit | float | Signed 32-bit |
byte | Unsigned 8-bit | double | Signed 64-bit |
char | Unicode 16-bit | ||
short | Signed 16-bit | ||
ushort | Unsigned 16-bit | ||
int | Signed 32-bit | ||
uint | Unsigned 32-bit | ||
long | Signed 64-bit | ||
ulong | Unsigned 64-bit |
2. 程序的静态与动态
程序的静态与动态是不同于类的成员的动态和静态的。那什么是程序的静态和动态呢?区分在于程序是否运行,在编写或在编译时,为静态时期,而在运行或者debug时,为动态时期。 (可以简单的理解为,静态的程序是在硬盘里,动态的程序是在内存里)
3. 栈与堆
栈:是给方法调用使用的,栈的大小比较小(1-2M),栈会出现overflow,一般是因为算法没写好函数调用过多,或者是程序有错误。
堆:是用来存储对象的,堆的大小比较大(1-2G),堆不会出现overflow,但是如果分配完对象之后不回收,就会出现内存泄漏
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace StackAndHeap
{
internal class Program
{
static void Main(string[] args)
{
BadGuy badGuy = new BadGuy();
badGuy.BadMethod();
}
}
class BadGuy
{
public void BadMethod()
{
int x = 100;
this.BadMethod();//只递不归,overflow
}
}
}