image.png

操作符概览

①优先级从上往下降低。 ②假如同一优先级操作符,一般为从左往右依次运算。 ③特殊注意:赋值操作符(最下面一行) 不但是最晚运算,操作符运算顺序还是从右往左。

image.png

操作符的本质

image.png

比如 int类型的除号 与 double类型的除号 是不一样的。

“简记法”案例(修改前后对比)如下:(自我看法:有点像重载)

image.pngimage.png

优先级与运算顺序

image.png

各类操作符的示例

image.png

基本操作符

最基本的不可拆分的表达式,基本运算符就是参与基本表达式的运算符。

x.y 成员访问操作符

①访问外层访问空间中的子级名称空间。 如:System.IO
②访问名称空间当中的类型。 如:System.IO.File
③访问类型当中的静态成员。 如:System.IO.File.Create(“D:\HelloWorld.text”);
④访问对象的成员。 如:
image.png

f(x) 方法调用操作符

为什么方法后面的圆括号”()”不能省掉?因为需要调用方法。

1656187663218.png

C#出现方法的名字,并不是所有都会跟着一个圆括号“()”。为什么呢? 解答:C#里有一种特殊的类型——委托 √

image.png

a[x] 元素访问操作符

用处:访问集合当中的元素√

①不要越界 。 ②元素访问操作符[]内不一定都是整数,比如字典中[]内存放索引。

image.png

x++ 后置自增 | x— 后置自减

① x++即x=x+1 x—即x=x-1 ②如下图,为什么会出现这种情况呢? 解答:x++与x—当遇到赋值时,先把自己的值传给y,再自增/减。相当于图二所示。

image.pngimage.png

typeof 查看类型内部结构

image.png

default 获取类型默认值

int属于结构体类型,给的值就是内存块中刷成0。(double同理也是0)

image.png

引用类型,内存块中刷成0其实就是null值。

image.pngimage.png

枚举类型 ①枚举类型在声明的时候,编译器会将其与整数值对应。第一个对应0,往后依次+1。即返回内存块中0的值。 ②假设枚举中没有0,default获取枚举值为0,此时逻辑出错。(设计时需要注意,给个0)

image.pngimage.pngimage.png

new 创建类型实例并调用实例构造器

var 声明隐式类型变量:先声明,看后续具体分析类型 一旦决定类型后,就无法转换类型(类型定下来就改不了了)

image.png
●new操作符的基本解释及功能:

①为什么程序没问题,但不显示? 解释:内存中创建了对象,但没任何变量引用或访问,过一会垃圾收集器就会将其收回。 ②不仅能创建实例并调用实例构造器,还能获得实例内存地址通过赋值符号提交给相关变量(构成引用关系)。

image.png

③还能调用初始化器。

image.png

④使用:可以一次性使用。

image.png

⑤不是需要创建实例就必须要new操作符!!!(语法糖衣)

image.png

⑥var关键字与new操作符组合:为匿名类型创建对象,用隐式类型变量来引用实例。

image.pngimage.png

⑦危险性:增加耦合性…那怎么办呢?设计模式,有一种重要的模式:依赖注入:将紧耦合转成比较松的耦合

●new关键字(非操作符):

①继承案例:

image.pngimage.pngimage.png

②使用new修饰符后:子类对父类方法的隐藏

image.pngimage.png

checked 检查值在内存中是否溢出

①使用try catch来接收报错 ②如果使用unchecked,则不检验此溢出错误

image.png

③上下文用法:中间有溢出就会提示 √ (当然也可以使用unchecked)

image.png

delegate

①大家通常认知是delegate关键字; ②此处为delegate操作符,现在使用变得非常稀有(过时)了。(Lambda的出现取代)

delegate操作符声明匿名方法:
image.pngimage.png
增加Lambda表达式后:( =>为Lambda表达式符号 )
image.png

sizeof 获得内存中所占字节数尺寸

①默认情况下,只能获取基本数据类型它们的实例在内存中所占的字节数。(String和Object除外,不是结构体) ②在非默认情况下,可使用sizeof获取自定义类型实例在内存当中所占字节数,但需放在不安全的上下文中。

image.png1656246431051.png

-> 直接操作内存

①C/C++访问对象成员的操作符,C#里面也有。 ②C#中->是直接操作内存的,必须要放在不安全的上下文中。 ③C#中严格规定:只能用来操作结构体类型,不能操作引用类型

image.png

一元操作符

概念:只有一个操作数(指的是操作数的个数)

&x 取地址操作符

①需要不安全的上下文。 ②用处:取地址交给指针变量

image.png

*x 取引用操作符

①需要不安全的上下文。 ②x可以取到对象,拿到实例。 ③为什么?因为基本操作符(x.y)的优先级大于一元操作符(x)。

image.png
&x 和 *x 的汇总用法:
image.png

+正 -负 !非 ~反 操作符

①+和-操作符需要注意,不要溢出!如:int类型最大/小值不一致

image.png

②~反操作符:在二进制单位下按位取反 (0变1,1变0) 回顾:怎么求相反数?按位取反再+1 。

image.png

③!非操作符:取True或false。工作中应用如下:

image.pngimage.png

++x前置自增 —x前置自减 操作符

①赋值符号=参与时:实际上先自增/减,再赋给其他值。 ②尽量分开来写,不然可读性差。

image.png

(T)x 强制类型转换 操作符

详解链接:https://www.yuque.com/u25921175/yrvhq9/vdo63r

算数运算操作符

①基本与数学运算相同。(C#中有一个取余数%操作符,在数学当中是没有的。) ②任何一个操作符,都是与数据类型相关的! ③在我们进行C#算数运算的时候,务必注意“数值提升”!!!也叫作“数据类型提升”!

*/ % 乘法运算操作符

+-加法运算操作符

详解链接:https://www.yuque.com/u25921175/yrvhq9/oywna5

移位操作符

<<左位移 >>右位移

简述:指的是数据在内存当中的结构,向左或向右进行一定位数的平移。

①在二进制下,左移一位相当于*2,右移一位相当于/2。

image.png

②左移补位,无论正负,补进来的都是0;右移补位,最高位为正数,则补0,为负数,则补1;

关系操作符 和 类型检测操作符

“< “、”>”、”<=”、”>=” 关系操作符

①所有关系操作符运算结果都是布尔类型,不是True就是False。

is as 类型检测操作符

①is : 检验对象是不是某个类型的对象 此处检验的不是变量,而是检验的实例。

image.pngimage.png
image.pngimage.png

②as :

image.pngimage.png

逻辑操作符

一般操作二进制数据,如图片等数据才会用到

逻辑”位与” &

image.png

逻辑”位或” |

image.png

逻辑”位异或” ^

image.png

条件操作符

① && 和 || 会有“短路效应”。如:左边满足条件时,右边表达式就不会执行。(需要尽量避)

条件“与”&&

image.png

条件“或”||

image.png

Null 合并操作符

①可控类型 Nullable 因为可控类型常用,C#吸收为关键字如下图二

image.pngimage.png

②拓展用法;

image.png

条件操作符 ?:

①唯一一个三个条件的操作符(三目表达式) ②其实就是if else的分支

image.png等价于image.png

赋值操作符 和 Lambda表达式

赋值操作符

赋值操作符包含 :”=”、”*=”、”/=”、”%=”、”+=”、”-=”、””、”<<=”、”>>=”、”&=”、”^=”、”|=”

①+=的案例:

image.png

Lambda表达式 =>