1、操作符概览
1)操作符是函数(算法)的简记法
2)操作符不能脱离与他关联的数据类型
int类型的/
int x = 5;
int y = 4;
int z = x/y;
//结果:z = 1;
double类型的/
double x = 5;
double y = 4;
double z = x/y;
//结果:z = 1.25;
3)举例:为自定义是数据类型创建操作符
3、操作符优先级
--C#语言中能提高优先级的只有()
4、同级操作符运算顺序
--带有赋值功能的操作符运算顺序由右往左
5、各类操作符的示例
基本操作符
1)成员访问操作符
--访问外层名称空间的子名称空间
--访问名称空间中的类型
--访问名称空间中的静态成员
--访问对象的成员
2)x++ 后置自加
int x = 100;
int y = x++;
Console.WriteLine(x);
Console.WriteLine(y);
//结果:x = 101;y = 100
int x = 100;
int y = x;
x = x+1;
Console.WriteLine(x);
Console.WriteLine(y);
//结果:x = 101;y = 100
3)typeof()
--获取指定类的类型
4)default()
--得到各种类型默认值
5)new关键字多用性
action1:new操作符
--作用:在内存中创建一个类型的实例,并调用这个实例的实例构造器/初始化器
实例构造器→Form myForm = new Form();中的()
初始化器→Form myForm = new Form(){Text = "hello"};中的{}
--举例说明new操作符的功能
--var关键字:声明隐式变量
隐式变量--var x;
显示变量--int x = 100;
--非匿名/匿名类型
非匿名类型--Form myForm = new Form(){Text = "hello"};
匿名类型--var Person = new{Name = "hello",Age = 10};
var Person:隐式变量引用实例;{Name = "hello",Age = 10}:为匿名类型创建对象
--注意:
new操作符功能强大,但不可乱用;
为避免new操作符带来的紧耦合,在编写大型程序时可使用“依赖注入”
“依赖注入”概念在后面阶段再学习
action2:new修饰符
//父类
class Student
{
public void Report()
{
Console.WriteLine("I'am a student");
}
}
//子类 子类隐藏父类[不常用]
class CsStudent:Student
{
new public void Report()//此处new作为修饰符
{
Console.WriteLine("I'am a Cs student");
}
}
6)checked/unchecked
--checked:检查值在内存中是否溢出
--unchecked:不检查值在内存中是否溢出
7)delegate关键字
--声明delegate委托数据类型
--delegate操作符[过时],已被Lambda表达式[匿名函数]代替
8)sizeof操作符
--作用:得到一个对象在内存中所占字节数
--举例说明如何得到一个对象在内存中所占字节数
--默认情况下,sizeof获取结构体类型的实例在内存中所占字节数[放在不安全的上下文中]
--非默认情况下,sizeof获取自定义结构体类型的实例在内存中所占字节数
9)->操作符[放在不安全的上下文中]
一元操作符
1)&x ,*x[放在不安全的上下文中]
--&取值操作符;*指针符号
2)~求反操作符
--按位取反+1
3)++x前置自加操作符
--单独使用++x与x++效果相同
--有赋值符号参与时效果不同
int x = 100;
int y = ++x;
Console.WriteLine(x);
Console.WriteLine(y);
//结果:x = 101;y = 101
int x = 100;
x = x+1;
int y = x;
Console.WriteLine(x);
Console.WriteLine(y);
//结果:x = 101;y = 101
4)(T)x 强制类型转换操作符
知识点:类型转换
--隐式类型转换:不用明确告诉编译器,编译器自动转换值的类型
不丢失精度的转换;例:int类型向long类型转换
子类向父类转换;重要!注意:一个引用变量访问它所引用的实例的成员时,只能访问变量类型所具有的成员,而不是引用实例的类型所具有的成员。
装箱
--显示类型转换:明确告诉编译器转换的类型
有可能丢失精度 发生错误的转换 使用cast;
拆箱;
使用Convert类;
ToString方法与各数据类的Parse/TryParse方法
--举例说明了隐式类型和显示类型可能发生的问题
--举例说明了自定义类型转换操作符
5)移位操作符<< >>
--左移时无论正负数均补0
--右移时正数均补0,负数补1
6)类型检测操作符is as
--is:判断一个对象是否为某类型的对象
Teacher t = new Teacher();
ver result = t is Teacher;
Console.WriteLine(result);
//结果:True
Teacher t = null;
ver result = t is Teacher;
Console.WriteLine(result);
//结果:False
//t是Teacher类型,但是t引用的实例为null,所以t不可能为Teacher
--as
//is方法
object o = new Teacher();
if(o is Teacher)
{
Teacher t = (Teacher)o;
t.Teach();
}
//as方法
object o = new Teacher();
Teacher t = o as Teacher;//o对象像Teacher一样
if(t!=null)
{
t.Teach();
}
//结果:调用Teacher实例中的Teach()函数
7)逻辑操作符& | ^
--位上的与或非
8)条件操作符&& || ?:
--注意:条件& 条件||存在短路效应要尽量避免
--?:作用同if....else....
int x = 80;
string str = x >= 60? "Pass" : "Failed"
//x >= 60?判断语句,"Pass"结果为True时输出Pass,"Failed"结果为False时输出Failed
COnsole.WriteLine(str);
//结果:Pass
9)Null合并操作符 ??
使用情景:期末统计平时成绩,有同学多次未交,给未交作业的同学0分
int ? x= null;
int y = x ?? 0;
//若x是null值,将0赋值给y
Console.WriteLine(y);
//结果:y=0