.NETFramework
1. 1.CLI– Common Language Infrastructure – 通用语言基础架构;
2. 将编写于.NET平台下的各种不同的语言都先编译为CIL(通用中间语言)代码(相当于Java的字节码),之后CIL代码可以运行在CLR环境中。
3. 2..NET编程模型:
4. 只能在CLR(Common Language Runtime)上运行的代码成为“托管代码”(受到CLR运行时环境的托管);
5. 既能在CLR(Common Language Runtime)上运行的代码,又能脱离CLR(Common Language Runtime)运行的代码成为“非托管代码”(不受CLR运行时环境的托管);
面向对象编程
1. OOP的三大特性:封装、集成和多态;
2. OOP的优点:
易维护(OOP所表现出的模块化可以降低各个模块之间的耦合度,而松耦合更加能够实现代码复用和随时替换掉某个模块的代码);
可复用性(实现一类可重复使用的代码,提高开发效率,缩短开发时间);
可扩展性(在一到两个类中,他们提供某些需要扩展新功能中的一部分功能,并以此通过继承来实现扩展功能);
语言基础
1. ASCII和Unicode
ASCII:每个字符占7位,包括大小写字母、数字和英文标点符号;
扩展ASCII:每个字符占8位,包括大小写字母、数字和英文标点符号,扩展了其他国家的字符,等同于ISO-8859-1编码集,包含了许多西欧国家用到的所有字符;
Unicode:每个字符占16位,主要分为UTF-8、UTF-16、UTF-32。
UTF-8与ASCII的字符占位数相同;UTF-16中,每个字符都放在16位的单元中存储,不常用的字符可通过UTF-16编码集进行访问;UTF-32中,每个字符都放在32位的单元中存储,一般不常用于Internet程序中使用,因为比较大,网络传输慢。
存储和传送8位字符集编写的文本是最高效的,因为一个字节正好占8位。即:
8 bit= 1B
“位”是数据存储中的最小单位,1bit表示“0”(脉冲)或“1”(脉冲间隔)其中的一种状态,例如:32位CPU,一次最大处理的数据量为32位的数据;64位CPU,一次最大处理的数据量为64位的数据。这就是为什么64位操作系统或64位CPU为什么运算能力强悍的主要原因。
内建类型和通用类型系统
1. 强类型语言要求每一条数据都必须显式的声明变量的数据类型,而不像JavaScript那样使用var来声明一个变量,甚至都不需要声明一个或一种变量的类型。因此,C#定义了内建类型。
但由于.NET Framework支持多种编程语言,则若想兼容或成功调用使用其他语言编写的程序或类型则这就要求前一个程序只能被转换成CTS兼容的类型,这样,遵守多个语言规范的变量类型才可以在不同语言间来回调用。
CTS– Common Type System - 通用语言系统;用于促进运行在.NET上不用语言间的良好交互性而产生。
C#内建类型包括:
C#类型(原始数据类型) | .NET类型(包装类) |
byte | Byte |
char | Char |
bool | Boolean |
short | Int16 |
int | Int32 |
float | Single |
double | Double |
decimal | Decimal |
long | Int64 |
string | String |
object | Object |
*bool和boolean
bool关键字是 Boolean 的别名。在C++中,可以将布尔值转换为0(false)或1(true),但在C#中不存在布尔值的转换。
变量
1. 变量是数据占位符。
2. C#的两种数据类型:基本数据类型(保存了基本数据)、引用数据类型(描述了对对象的引用)。
3. 关键字加上“@”(前缀)即可当成合法的变量标识符(变量名)来使用。
4. 例如:
@class、@struct
常量
1. 标识符const,一旦被赋值,就无法改变其值。若试图修改,则会报错。
直接量
1. 概念:值的源代码表示被称为“直接量”。需要用C#编译器能够理解的格式来写出值的表现形式。
2.
直接量分为3种:
*在浮点型直接量中,作为0的整数部分是可选的,即如下表达式成立:
float f1 = .5f; //单精度浮点型直接量必须在其后加“F”或“f”表示其为float类型的变量
double d1 = .25; //双精度浮点型直接量可以加或不加“D”或“d”,都同样能表示双精度浮点数
字符型直接量是用单引号括起来的Unicode字符或转义序列。
例如:
Unicode字符:
‘a’
‘b’
‘c’
转义序列:
‘\t’ //tab键字符
‘\n’ //换行字符
‘\”’ //双引号字符
基本类型的转换
1. 放大转换(宽化转换)[隐式转换]
从一种转换到另一种转换时,后者的大小总大于等于前者。
例如:
从数据类型int转换到数据类型long。
*从long转换到float也属于放大转换,因为long与float在内存中的存储方式完全不同,float和double是用科学计数法来存储的,与long存储的整型数据的存储方式有着本质额区别。
2. 缩小转换(窄化转换)[显式转换]
从一种数据类型转换到另一种更小的数据类型的转换。
运算符
1. C#的运算符分类:
2. 一元运算符:
加运算符(+)、减运算符、(-)、递增运算符(++)、递减运算符(--)、逻辑取反运算符(!)、按位求补运算符(~)和Sizeof运算符。
*按位求补运算符的操作数必须是整数或整型变量。将操作数按照二进制8位的每一位进行取反操作。
例如:
Int j = 2; //2的二进制表示为:0000 0000 0000 0000 0000 0000 0000 0010
Int k = ~j; //对2的二进制取反:1111 1111 1111 11111111 1111 1111 1101
1111 11111111 1111 1111 1111 1111 1101转换为十进制就为-3
结果:j=2;k=-3
Sizeof运算符用于获取一个数据类型的字节长度。
例如:
Sizeof(int)返回结果为4。
3. 算术运算符:
加、减、乘、除和取模5种算术运算符。
4. 关系运算符:
大于、大于等于、小于、小于等于4种运算符,结果为布尔型的值。
5. 条件运算符
与运算符(&&)、或运算符(||)和 ?:运算符3种。
&&运算符将两个表达式作为操作数,且两个表达式必须有返回值,且返回值必须为布尔型。若两个表达式的值都为true,则整个表达式返回true,否则返回false。若左边的表达式已经返回为false了,那么右边的表达式将不会再做判断。
例如:
(5<3) && (6<9)
返回结果为false,且当判断了5<3为false之后,右边的表达式将不做判断。
|| 运算符将两个表达式作为操作数,且两个表达式必须有返回值,且返回值必须为布尔型。若其中一个表达式的值为true,则整个表达式返回true。若左边的表达式已经返回为true了,那么右边的表达式将不会再做判断。
例如:
(5<3) || (6<9)
返回结果为true
?: 运算符将三个表达式作为操作数,语法格式:
Expression1 ? Expression2: Expression3
Expression1必须返回布尔类型的值;若Expression1的值返回true,则整个表达式的结果为Expression2,否则整个表达式的结果为Expression3。
6. 位移运算符
操作数必须为整型数据。左边表示要位移的值,右边表示位移的距离。
例如:
1<<3
表示将1向左移动3位。
1的二进制表示:0000 0000 0000 0000 0000 0000 0000 0001
向左移动3位:0000 0000 0000 00000000 0000 0000 1000
结果等于8(1 x 23)。
位移的距离范围必须在0~31之间(共32位),若超出此范围则会从最开头下一轮算起,即:1<<32和1<<0等同,1<<33和1<<1等同。
7. 赋值运算符
=、+=、-=、*=、/=、%=、<<=、>>=、>>>=、&=、^=和 |= 12种赋值运算符。
按位与运算:将整数的每一位与另一整数的每一位进行按位与运算,位上的数字相同得1,不同得0。
例如:
3 & 5 – 3和5的按位与运算
3的二进制表示:0000 0000 0000 0000 0000 0000 0000 0011
5的二进制表示:0000 0000 0000 0000 0000 0000 0000 0101
运算原理:
两部分赋值运算符先对两个操作数应用第一个运算符,之后把结果赋值给左边的操作数。
提升
有些运算会将一种数据类型提升到另一种更大的数据类型中去。
例如:
byte x = 5;
int y = -x; //这里,已经默认将原来的byte类型自动提升到了int数据类型,比原来的数据类型更大了
若不自动提升,即强转一下即可不自动提升数据类型。
例如:
byte x = 5;
byte y = (byte) -x;