操作符概览
①优先级从上往下降低。 ②假如同一优先级操作符,一般为从左往右依次运算。 ③特殊注意:赋值操作符(最下面一行) 不但是最晚运算,操作符运算顺序还是从右往左。
操作符的本质
比如 int类型的除号 与 double类型的除号 是不一样的。
“简记法”案例(修改前后对比)如下:(自我看法:有点像重载)
优先级与运算顺序
各类操作符的示例
基本操作符
最基本的不可拆分的表达式,基本运算符就是参与基本表达式的运算符。
x.y 成员访问操作符
①访问外层访问空间中的子级名称空间。 如:System.IO
②访问名称空间当中的类型。 如:System.IO.File
③访问类型当中的静态成员。 如:System.IO.File.Create(“D:\HelloWorld.text”);
④访问对象的成员。 如:
f(x) 方法调用操作符
为什么方法后面的圆括号”()”不能省掉?因为需要调用方法。
C#出现方法的名字,并不是所有都会跟着一个圆括号“()”。为什么呢? 解答:C#里有一种特殊的类型——委托 √
a[x] 元素访问操作符
用处:访问集合当中的元素√
①不要越界 。 ②元素访问操作符[]内不一定都是整数,比如字典中[]内存放索引。
x++ 后置自增 | x— 后置自减
① x++即x=x+1 x—即x=x-1 ②如下图,为什么会出现这种情况呢? 解答:x++与x—当遇到赋值时,先把自己的值传给y,再自增/减。相当于图二所示。
typeof 查看类型内部结构
default 获取类型默认值
int属于结构体类型,给的值就是内存块中刷成0。(double同理也是0)
引用类型,内存块中刷成0其实就是null值。
枚举类型 ①枚举类型在声明的时候,编译器会将其与整数值对应。第一个对应0,往后依次+1。即返回内存块中0的值。 ②假设枚举中没有0,default获取枚举值为0,此时逻辑出错。(设计时需要注意,给个0)
new 创建类型实例并调用实例构造器
var 声明隐式类型变量:先声明,看后续具体分析类型 一旦决定类型后,就无法转换类型(类型定下来就改不了了)
●new操作符的基本解释及功能:
①为什么程序没问题,但不显示? 解释:内存中创建了对象,但没任何变量引用或访问,过一会垃圾收集器就会将其收回。 ②不仅能创建实例并调用实例构造器,还能获得实例内存地址通过赋值符号提交给相关变量(构成引用关系)。
③还能调用初始化器。
④使用:可以一次性使用。
⑤不是需要创建实例就必须要new操作符!!!(语法糖衣)
⑥var关键字与new操作符组合:为匿名类型创建对象,用隐式类型变量来引用实例。
⑦危险性:增加耦合性…那怎么办呢?设计模式,有一种重要的模式:依赖注入:将紧耦合转成比较松的耦合
●new关键字(非操作符):
①继承案例:
→ →
②使用new修饰符后:子类对父类方法的隐藏
checked 检查值在内存中是否溢出
①使用try catch来接收报错 ②如果使用unchecked,则不检验此溢出错误
③上下文用法:中间有溢出就会提示 √ (当然也可以使用unchecked)
delegate
①大家通常认知是delegate关键字; ②此处为delegate操作符,现在使用变得非常稀有(过时)了。(Lambda的出现取代)
delegate操作符声明匿名方法:
增加Lambda表达式后:( =>为Lambda表达式符号 )
sizeof 获得内存中所占字节数尺寸
①默认情况下,只能获取基本数据类型它们的实例在内存中所占的字节数。(String和Object除外,不是结构体) ②在非默认情况下,可使用sizeof获取自定义类型实例在内存当中所占字节数,但需放在不安全的上下文中。
-> 直接操作内存
①C/C++访问对象成员的操作符,C#里面也有。 ②C#中->是直接操作内存的,必须要放在不安全的上下文中。 ③C#中严格规定:只能用来操作结构体类型,不能操作引用类型
一元操作符
&x 取地址操作符
①需要不安全的上下文。 ②用处:取地址交给指针变量
*x 取引用操作符
①需要不安全的上下文。 ②x可以取到对象,拿到实例。 ③为什么?因为基本操作符(x.y)的优先级大于一元操作符(x)。
+正 -负 !非 ~反 操作符
①+和-操作符需要注意,不要溢出!如:int类型最大/小值不一致
②~反操作符:在二进制单位下按位取反 (0变1,1变0) 回顾:怎么求相反数?按位取反再+1 。
③!非操作符:取True或false。工作中应用如下:
++x前置自增 —x前置自减 操作符
①赋值符号=参与时:实际上先自增/减,再赋给其他值。 ②尽量分开来写,不然可读性差。
(T)x 强制类型转换 操作符
详解链接:https://www.yuque.com/u25921175/yrvhq9/vdo63r
算数运算操作符
①基本与数学运算相同。(C#中有一个取余数%操作符,在数学当中是没有的。) ②任何一个操作符,都是与数据类型相关的! ③在我们进行C#算数运算的时候,务必注意“数值提升”!!!也叫作“数据类型提升”!
*/ % 乘法运算操作符
+-加法运算操作符
详解链接:https://www.yuque.com/u25921175/yrvhq9/oywna5
移位操作符
<<左位移 >>右位移
简述:指的是数据在内存当中的结构,向左或向右进行一定位数的平移。
①在二进制下,左移一位相当于*2,右移一位相当于/2。
②左移补位,无论正负,补进来的都是0;右移补位,最高位为正数,则补0,为负数,则补1;
关系操作符 和 类型检测操作符
“< “、”>”、”<=”、”>=” 关系操作符
①所有关系操作符运算结果都是布尔类型,不是True就是False。
is as 类型检测操作符
①is : 检验对象是不是某个类型的对象 此处检验的不是变量,而是检验的实例。
②as :
逻辑操作符
一般操作二进制数据,如图片等数据才会用到
逻辑”位与” &
逻辑”位或” |
逻辑”位异或” ^
条件操作符
① && 和 || 会有“短路效应”。如:左边满足条件时,右边表达式就不会执行。(需要尽量避)
条件“与”&&
条件“或”||
Null 合并操作符
①可控类型 Nullable 因为可控类型常用,C#吸收为关键字如下图二
②拓展用法;
条件操作符 ?:
①唯一一个三个条件的操作符(三目表达式) ②其实就是if else的分支
赋值操作符 和 Lambda表达式
赋值操作符
赋值操作符包含 :”=”、”*=”、”/=”、”%=”、”+=”、”-=”、””、”<<=”、”>>=”、”&=”、”^=”、”|=”
①+=的案例: