C#
文章目录
数据类型
简单类型
值类型
布尔型
- bool类型数据只允许取值true或false,不可以0或非0的整数代替-true和false。
- 在C#语言中,bool类型不能像C++语言那样直接转换为int类型
字符型
- 在表示一个字符常数时,单引号内的有效字符数量必须有且只能是一个,而且不能是单引号或者反斜杠(\)。
转义符转义符
引用类型
- 根据类创建的对象都是引用类型
- 特殊的引用类型:object,string,数组
obeject类
- object是C#中所有类型(包括所有的值类型和引用类型)的基类。因此,对一个object的变量可以赋予任何类型的值。
- 装箱(Boxing)与拆箱 (unboxing):
字符串类型
- “@” 加在字符串前时,所有字符将不需要经过转义。
当字符串中包含反斜杠、双引号、换行符时可以使用。
特殊类型
推断类型
- 类型由编译器推断,在编译时确定。
Nullable类型
- 允许赋值为Null
Dynamic类型
- 编译时不检查,运行时才确定,主要用于与COM组件或其他语言交互
垃圾回收
CLR的GC(Garbage Collector)自动删除堆上不再访问的数据。
常量变量与命名
命名建议:
- 可以使用“重构”改名(点右键—重构—重命名)
- 驼峰命名法
运算符与表达式
- ^是异或操作符,不是乘方
C#没有乘方运算符。乘方使用Math.Pow函数
算术计算
- 除法/:运算结果绝对值为实际运算结果绝对值向下取整
- 取余 %:c=a%b,c符号与a相同,|c|=|a|-n*|b|
- 计算溢出问题:借助checked函数,捕获异常OverFlowException.
1.0/0.0是Infinity,0.0/0.0是NaN - “+” 运算符两侧的操作数中只要有一个是字符串(String)
类型,系统会自动将另一个操作数转换为字 符串然后再进行连接
逻辑运算符
- && : 第一个操作数为假则不判断第二个操作数
|| : 第一个操作数为真则不判断第二个操作数
赋值运算符
- 值类型的变量赋值:复制值
引用类型的变量复制:复制引用
类型转换
值类型转换
- 强制转换: (类型标识符)表达式,如(int)1.23
- 隐式转换:源类型的数值范围是目标类型数值范围的子集,是安全的转换,不会造成数据越界。
引用类型转换
- 引用类型的赋值:复制引用
- 转型异常):强制转型虽然可以编译通过,但在运行时,如果实际对象的类型不是变量类型(或者子类)的时候,会抛出InvalidCastException
- 如何避免InvalidCastException:
字符串和数值的类型转换
- 采用以下方法进行转换,错误会抛出异常Eception, 可以输出其message查看
流程控制语句
分支语句–if
- 利用条件返回if-return,使嵌套结构变为顺序结构(在一个方法中,嵌套层次一般不要超过3层)
分支语句-- switch语句
- C#的Switch语句与C++/Java不同之处:
分支表达式除了整型、字符、枚举型,还可以用字符串
每个分支只有没有语句时,或者return/throw/goto等跳转语句时,才能省略后续的break
循环语句
for、while、do-while与c++语法相同
continue和break
数组
数组初始化
- 与Java语法相同,与C++语法不同,注意括号位置。
声明数组时不能指定其长度(数组中元素的个数) - 动态初始化:数组定义与用new为数组元素分配空间并赋值的操作分开进行
- 静态初始化:在定义数组的同时就为数组元素分配空间并赋值
数组元素的默认值
- 数组是引用类型,它的元素相当于类的成员变量
- 数组一经分配堆空间,其中的每个元素也被按照成员变量同样的方式被隐式初始化。
- 数组是一个对象,属性Length指明它的长度
多维数组
交错数组
- 交错数组是数组的数组,因此可以是不规则的
- 交错数组的声明和初始化应按从高维到低维的顺序进行
数组基类Array
foreach语句
foreach是只读式的遍历,不能修改数组元素
Ref参数和Out参数
- 使用Ref参数,可以将变量的引用(相当于栈地址,不是堆地址)传递给被调方法
- ref修饰的变量在传递参数前要有初始值
- 一个方法返回多个值,可由out关键词标识的输出参数实现
- out修饰的参数要在方法中赋予初始值后,才能使用
- 离开方法前必须给out参数赋值
- out参数传递在前可以没有初始值(要在调用传参数括号中声明out参数类型)
- 甚至不需要预声明(不声明时要在调用传参数括号中声明out参数类型)