—-刘铁猛《C#语言入门详解》
类型
首先理解什么是内存,内存是指计算机存储数据的地方,在冯诺依曼架构叫做存储器。我们可以简单理解成就是内存条(动态)和硬盘(静态)。狭义的理解就是:软件运行的时候,主要靠的内存条来存储,处理信息。一般我们说电脑卡,实际上就是指电脑在一定时间内要处理的信息,超过了内存条能处理的数量,所以需要排队处理,是这样就会导致电脑看起来不动,但是电脑依旧是在处理操作中。
类型:又叫做数据类型
- 数据在内存中存储时的“型号”;
- 小内存容纳大尺寸数据会丢失精确度、发生错误;
- 大内存容纳小尺寸数据会导致浪费;
- 编程语言的数据类型于数据的数据类型不完全相同。
强类型语言、弱类型语言
强类型指的是声明的变量是什么类型,以后它就是什么类型,弱类型指声明的变量可以是多个类型
强类型(c#)
- 强类型语言是指在编程时要求严格定义变量的数据类型,不允许不同类型之间的隐式转换。
- 在强类型语言中,变量的数据类型必须在编译时就确定,并且不会发生自动类型转换。
- 强类型语言通常具有更严格的类型检查,能够在编译时捕获一些潜在的类型错误。
弱类型(python,c)
- 弱类型语言是指在编程时对变量的数据类型要求较为灵活,允许不同类型之间的隐式转换。
- 在弱类型语言中,变量的数据类型通常可以在运行时动态确定,允许自动类型转换。
- 弱类型语言通常具有更灵活的类型系统,但也可能导致一些难以发现的类型错误。
例如
//c#
if(x==2)//编译通过
if(x=2) //编译报错
//c
if(x==2)//编译通过
if(x=2) //编译通过
原因就是c#中规定if内必须是布尔值,而x=2是一个赋值过程,是一个int值,所以不能编译;
c不受数据的约束,0为假,非0为真,所以很多程序员写c的时候都会写成 if(2==x),这样能避免当出现if(2=x)时候编译器及时报错。
Tip:c#中用dynamic定义的变量可以让该变量在不同时刻赋任何类型的值。但不建议初学者使用。
与dynamic不同,var是根据赋值的类型自行推断。
//c#
if(x==2)//编译通过
if(x=2) //编译报错
//c
if(x==2)//编译通过
if(x=2) //编译通过
原因就是c#中规定if内必须是布尔值,而x=2是一个赋值过程,是一个int值,所以不能编译;
c不受数据的约束,0为假,非0为真,所以很多程序员写c的时候都会写成 if(2==x),这样能避免当出现if(2=x)时候编译器及时报错。
Tip:c#中用dynamic定义的变量可以让该变量在不同时刻赋任何类型的值。但不建议初学者使用。
与dynamic不同,var是根据赋值的类型自行推断。
类型的作用
一个c#类型中所包含的信息有
- 存储此类型变量所需的内存空间大小。
- 此类型的值可表示的最大、最小值范围。
- 此类型所包含的成员(方法,属性、事件等)。
- 此类型由哪个基类派生过来。
- 程序运行时候,此类型的变量在内存的什么位置。
- Stack简介:栈:方法调用
- Stack overflow: 栈溢出:比如递归没有写终止条件。
- Heap简介:堆:存储对象
- 使用Performance Monitor查看进程的堆内存
- 内存泄漏:c#自带gc回收。
- 此类型所允许的操作。
类型系统
Q:请问c#中有哪些数据类型?
A:c#中主数据类型主要分为引用类型和值类型,其中引用类型包括类、接口、和委托,值类型包括结构体、枚举,它们都以Object为基类。
A:c#中主数据类型主要分为引用类型和值类型,其中引用类型包括类、接口、和委托,值类型包括结构体、枚举,它们都以Object为基类。