C#_02.12_基础二_.NET类型存储和变量
一、核心一句:C#程序是一组类型声明(留待后面慢慢体会,现在不是很理解,不强说了)
二、数据类型:
1、预定义了16种数据类型:
其中13种简单数据类型,包括11种数值类型和2种非数值类型:
数值类型:
数据类型 |
字节 |
有无符号 |
后缀 |
默认值 |
精确位数 |
Sbyte: |
1 |
无 |
= |
0 |
0 |
Byte: |
1 |
有 |
= |
0 |
0 |
Short: |
2 |
无 |
= |
0 |
0 |
Ushort: |
2 |
有 |
= |
0 |
0 |
Int: |
4 |
无 |
= |
0 |
0 |
Uint: |
4 |
有 |
U |
0 |
0 |
Long: |
8 |
无 |
L |
0 |
0 |
Ulong: |
8 |
有 |
UL |
0 |
0 |
Float: |
4 |
无 |
F |
0.0F |
7 |
Double: |
8 |
有 |
D |
0.0D |
15 |
Decimal: |
16 |
有 |
M |
0.0M |
28 |
非数值类型:
Bool:占一个字节,默认值是FALSE
Char:占一个字节,默认值是\x000
3种非简单数据类型:
String:相当于char型的数组:
Object:是C#所有对象的基类;
Dynamic:江湖传言这一种数据类型在IL里面object类型。经验证确实是object类型。与var的区别是:
1、var能够使用智能感知,dynamic不行,写的时候使用var声明的变量可以使用” . ”来方便书写,而是用dynamic声明的变量因为无法智能感知,所以不行。
2、在编译的时候,var声明的变量是有进行类型检查的,而使用dynamic是没有的,一直到运行的时候才进行类型检查。
个人对于dynamic的初步感觉:平常情况下不好用,因为是不能够智能感知的,因此在编写的时候可能出现所调用的方法不对之类的情况,又需要等到代码运行才能够检查出来。
2、用户自定义类型(6种):
类类型(class):
结构类型(struct):
数组类型(array):
枚举类型(enum):
委托类型(delegate):
接口类型(interface):
三、值类型与引用类型:
值类型是存储在栈内存当中的,而引用类型是存储在堆内存当中的。一个引用类型不管是否包含值类型,都是存储在堆当中的。值类型和引用类型之间的存储的区别是:
值类型是存储在栈当中的,只需要一段内存存储实际的数据;
引用类型需要两端内存:一是堆当中的,是引用类型的实际数据,一段是在栈当中的,是存储指向引用类型实际数据的引用。
# |
值类型 |
引用类型 |
预定义类型 |
sbyte、 byte、 short、ushort、 int、 uint、 |
string |
自定义类型 |
struct enum |
class |
四、变量
变量分为四种类型:
变量类型 |
描述 |
是否自动赋值 |
本地变量 |
函数当中定义的变量,局部变量,不是类的成员 |
否 |
参数 |
作为方法间传递的变量,不是类的成员 |
否 |
字段 |
是类的成员 |
是 |
数组 |
可是可不是类的成员,一般由同类型的变量组成 |
是 |
注:数组和字段(属性)才可以对未赋值的变量进行自动赋值