1 操作符概览
2 基本操作符
new操作符
作用一:创建数组实例
int[] myIntArray = new int[10];
int[] myIntArray = new int[]{1,2,3,4,5};
作用二:在内存中创建类型的实例并且立刻调用实例构造器,如果在new操作符的左边存在赋值符号,new操作符会把自己拿到的实例的内存地址交给负责访问这个实例的变量
附加功能:调用实例的初始化器
特殊用法:为匿名类型创建对象,并且用隐式类型变量来引用这个实例(var的强大用法在这里可以体现出来)
var关键字
主要用法:声明隐式类型变量
checked(检查异常)和unchecked(不检查异常)操作符
用于检查程序的异常
或者这样使用
default操作符
用以获取一个类型的默认值
在三种数据类型中的应用
输出的结果为:
delegate操作符
最广泛的用途不是用作操作符,而是用来声明一种叫做委托的数据类型
sizeof操作符
只能用于获取基本数据类型(结构体数据类型)的实例在内存中所占的字节数
在非默认的情况下可以用其获取自定义的类型的实例在内存中所占的字节数,但是需要在不安全的上下文里面
->操作符
需要放在不安全的上下文里
指针操作只能用来操作结构体类型
2 一元操作符
&操作符(取地址操作符)
在C#中必须用在不安全的上下文中
*操作符(取引用操作符)
在C#中必须用在不安全的上下文中
-操作符和~操作符
C#语言中取相反数是进行按位取反再加一
~操作符:进行二进制的按位取反
!操作符
只能用于操作bool类型的值
取非操作符在现实中的应用
(T)x
显示类型类型转换操作符
类型转换
隐式(implicit)类型转换
不丢失精度的转换
子类向父类的转换
装箱
显式(explicit)类型转换
有可能丢失精度(甚至发生错误)的转换,即cast
拆箱
使用Convert类
ToString方法与各数据类型的Parse/TryParse方法(将各类数据转换为字符串的方法)
Parse方法(目标数据类型的Parse方法):Parse只能解析字符串格式正确的数据类型,所以一般使用TryParse这个方法
自定义类型转换操作符(自定义了Monkey这个类型转换操作符)
4 算术运算符
乘法运算符
留意“数据类型提升”,把运算结果提升到一个不损失精度的级别上
(4被提升为double类型,所以最后的结果也是double类型)
5 关系操作符
所有关系操作符的结果都是布尔类型的
字符串的比较(字符串不可以比较大小,只能比较是否相等)
is类型检验操作符
is操作符用来检验一个变量所引用的实例是不是某个类型的对象
检验t引用的实例是否为Teacher类型,检验的不是变量,而是变量所引用的实例(这里的结果为Ture)
这里变量t的类型为Teacher,但是引用的实例为null,所以结果为False
as类型检验操作符
o像Teacher一样,对不对?如果o真的像Teacher一样,那么就将对象的地址交给t这个变量,否则就把null值交给t这个变量
6 逻辑运算符
按位求与 &
按位求或 |
按位异或 ^
7 条件运算符
用于操作布尔类型的值,结果也是布尔类型的值
条件与&&
条件或 ||
条件与和条件或的短路效应
短路效应就是:当条件与发现自己左边的表达式已经是假值以后,右边的表达式就不会被执行(写代码时要避免短路效应)
null合并操作符??
情景:给没交作业的同学的成绩暂时保留一个空值(而不是零值)
C#语言有一个可空的数据类型(如下)
结果为:
由于可空类型非常常用,所以C#语言将他吸收为int?关键字,所以上面的表达等同于下面的表达
另一个情景:某同学一个学期好多次作业没有交,期末需要算总成绩的时候,需要用一个值来代替没交作业的成绩(比如不交作业,就替换为0分)
利用null值合并操作符??
检验x是否为空,如果x为空,那么将0值赋给y
条件操作符?:
唯一可以有三个操作数的操作符
条件操作符本身就是if-else的简写
情景如下:(将大于等于60分的成绩算作及格,小于60分算作不及格)
可以利用条件操作符来压缩代码空间,让代码看上去更加简洁:
8 赋值和lambda表达式
lambda表达式先不讲