1 常量与变量
1.1 常量
1.1.1 整型常量
有符号——直接书写
无符号——书写时添加U或者u
长整型——书写时添加L或者l
1.1.2 浮点型常量
单精度——书写时添加F或者f
双精度——书写时添加D或者d
未添加时——自动解释为双精度浮点常量
1.1.3 小数型常量
必须添加M或者m,否则会被解释成标准的浮点型数据
1.1.4 字符型常量
标准的unicode字符
用英文单引号标记
转义字符:反斜杠符()开头,后跟字符的字符序列
转义符 说明 \’ 单引号 \” 双引号 \ 反斜杠 \0 空 \a 警告(产生峰鸣) \b 退格 \f 换页 \n 换行 \r 回车 \t 水平制表符 \v 垂直制表符 \uhhhh 使用16进制形式的unicode字符 \0dd 使用8进制形式的ACSII字符 \xhh 使用16进制形式的ACSII字符
1.1.5 布尔型常量
true——逻辑真
false——逻辑假
1.1.6 字符串常量
使用双引号来标记
1.2 变量
1.2.3 概念
变量名:命名规则
1.变量的名以字母、下划线或@开头,后面可以跟字母、数字、下划线,而不能包含空格、标点符号、运算符等其它符号。
2.变量名不能与C#中的关键字名称相同。这些关键字我们在附录A中给出。
3.变量名不能与C#中的库函数名称相同
4.对大小写敏感
5.同一变量名不允许重复定义
2 数据类型
2.1 简单类型
类型 | 别名 | 长度 | 说明 |
---|---|---|---|
object | System.Object | 基类型 | |
string | System.String | 字符串类型 | |
sbyte | System.SByte | 8 | 有符号整型 |
short | System.Int16 | 16 | 有符号整型 |
int | System.Int32 | 32 | 有符号整型 |
long | System.Int64 | 64 | 有符号整型 |
byte | System.Byte | 8 | 无符号整型 |
ushort | System.UInt16 | 16 | 无符号整型 |
uint | System.UInt32 | 32 | 无符号整型 |
ulong | System.UInt64 | 64 | 无符号整型 |
float | System.Single | 32 | 单精度浮点型 |
double | System.Double | 64 | 双精度浮点型 |
bool | System.Boolean | 1 | 布尔型;bool 值或为真或为假 |
char | System.Char | 16 | 字符类型 |
decimal | System.Decimal | 128 | 精确的小数类型,具有 28 个有效数字 |
2.2 枚举型enum
实质就是使用符号来表示一组相互关联的数据
注意:
1.枚举元素的数据值是确定的,一旦声明就无法更改.
2.枚举元素的个数是有限的1,一旦声明无法增减
3.元素的值是一个整数,第一个默认是0,后面的依次+1
4.要改变默认规则重写即可
2.3 结构体struct
1.使用关键字struct标记,包含数据成员和方法成员;
2.引用结构型的成员格式:结构型变量.结构型成员
3.结构体中声明字段时不能赋值执行代码(赋值等操作)应写在方法成员中
4.结构是值类型
什么是值类型?
a)在C#中值类型的变量直接存储数据,而引用类型的变量持有的是数据的引用,数据存储在数据堆中。b)值类型变量声明后,不管是否已经赋值,编译器为其分配内存。
c)C#的所有值类型均隐式派生自System.ValueType(System.ValueType直接派生于System.Object,它重写了Equals()方法,从而对值类型按照实例的值来比较,而不是引用地址来比较。)
d) 值类型都是密封(seal)的,无法派生出新的值类型。
——-I believe that a developer who misunderstands the difference between reference types and value types will introduce subtle bugs and performance issues into their code.
5.不支持继承
6.存在默认的、无参的构造函数;可以定义构造函数但不允许显式定义无参的构造函数,且没有析构函数;
7.创建方式:a)直接声明,逐一声明.(缺点:在使用前必须手动赋值)
b)使用关键字new,(系统调用构造函数,自动为所有字段赋值)
2.4 类型转换
隐式转换;一般在不同类型中的数据类型中进行混合运算时发生,当编译器能自动判断出转换的类型而且转换的类型不会带来精度的损失时,会自动进行隐式转换.
- 从sbyte类型到short,int,long,float,double,或decimal类型。
- 从byte类型到short,ushort,int,uint,long,ulong,float,double,或decimal类型。
- 从short类型到int,long,float,double,或decimal类型。
- 从ushort类型到int,uint,long,ulong,float,double,或decimal类型。
- 从int类型到long,float,double,或decimal类型。
- 从uint类型到long,ulong,float,double,或decimal类型。
- 从long类型到float,double,或decimal类型。
- 从ulong类型到float,double,或decimal类型。
- 从char类型到ushort,int,uint,long,ulong,float,double,或decimal类型。
- 从float类型到double类型.
显示转换:明确要求编译器完成的转换,也称强制类型转换,形式:(类型说明符)(待转换数据)
- 从sbyte到byte,ushort,uint,ulong,或char。
- 从byte到sbyte或char。
- 从short到sbyte,byte,ushort,uint,ulong,或char。
- 从ushort到sbyte,byte,short,或char。
- 从int到sbyte,byte,short,ushort,uint,ulong,或char。
- 从uint到sbyte,byte,short,ushort,int,或char。
- 从long到sbyte,byte,short,ushort,int,uint,ulong,或char。
- 从ulong到sbyte,byte,short,ushort,int,uint,long,或char。
- 从char到sbyte,byte,或short。
- 从float到sbyte,byte,short,ushort,int,uint,long,ulong,char,或decimal。
- 从double到sbyte,byte,short,ushort,int,uint,long,ulong,char,float,或decimal。
- 从decimal到sbyte,byte,short,ushort,int,uint,long,ulong,char,float,或double。
3 运算符与表达式
3.1 算术运算符与表达式
算术运算符:+,-,*,/,%,++,–
注意:a2=++a1—>先加后用:先a1=a1+1,然后a1赋值给a2
a2=a1++—>先用后加:先赋值给a2,然后a1=a1+1
3.2 赋值运算符与表达式
简单赋值表达式
变量=表达式
复合赋值表达式
+=,-=,*=,-=,%=
3.3 关系运算符与表达式
==,!=,>=,<=,>,<
3.4 逻辑运算符与表达式
!,&&,&,||,|,^
&,&&
&&:第一个表达式是false时后面的表达式不执行||,|
||:第一个表达式是true时后面的表达式不执行
3.5 运算符优先级
1.括号
2.一元运算符 ++(自增),–(自减),!(非)
3.*(乘),/(除),%(取余)
4.+(加),-(减)
5.>,<,>=,<=
6.==,!=
7.&&(逻辑与)
8.||(逻辑或)
9.赋值运算符 =,+=,-=,*=,/=,%=