2021-06-08-刘铁猛C#语言入门详解-学习笔记P10/11/12

2021/06/08-刘铁猛C#语言入门详解-学习笔记

P10/11/12 操作符详解operator

1、操作符概览

2021-06-08-刘铁猛C#语言入门详解-学习笔记P10/11/12_第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类型转换

2021-06-08-刘铁猛C#语言入门详解-学习笔记P10/11/12_第2张图片

子类向父类转换;重要!注意:一个引用变量访问它所引用的实例的成员时,只能访问变量类型所具有的成员,而不是引用实例的类型所具有的成员。

装箱

--显示类型转换:明确告诉编译器转换的类型

有可能丢失精度 发生错误的转换 使用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

你可能感兴趣的:(c#,其他)