您好,欢迎访问三七文档
C#运算符的重载培训运算符重载将自定义的类型赋予运算符号,使得对象和对象可以进行运算,称为运算符重载。如果有一自定义的类型命名为「二维座标」,若重载「+」运算符,则(3,5)+(4,-3)=(7,2)培训c#里的运算符重载是个不常出现的应用,同时也是个好玩的东西。operator关键字用于在类或结构声明中声明运算符。:培训运算符重载//重载一元运算符原型声明publicstaticreturn-typeoperatorop(typeoperand){//statement;}//重载二元运算符原型声明publicstaticreturn-typeoperatorop(typeoperand1,typeoperand2){//statement;}培训classA{intx;publicintX{get{returnx;}set{x=value;}}//重载加操作符publicstaticAoperator+(Aa,Ab){Ac=newA();c.x=a.x+b.x;returnc;}//重载减操作符publicstaticAoperator-(Aa,Ab){Ac=newA();c.x=a.x-b.x;returnc;}}classB{staticvoidMain(){Aa=newA();a.X=3;Ab=newA();b.X=5;//使用加法Ac=a+b;Console.WriteLine(c.X);//使用减法c=a-b;Console.WriteLine(c.X);}}培训类别运算符限制算术二元运算符+,*,/,–,%无算术一元运算符+,–,++,––无按位二元运算符&,|,^,,无按位一元运算符!,~,true,falsetrue和false运算符必须成对重载比较运算符==,!=,=,,=,必须成对重载赋值运算符+=,–=,*=,/=,=,=,%=,&=,|=,^=不能显式重载这些运算符,在重写单个运算符如+,–,%等时,它们会被隐式重写索引运算符[]不能直接重载索引运算符。第2章介绍的索引器成员类型允许在类和结构上支持索引运算符数据类型转换运算符()不能直接重载数据类型转换运算符。用户定义的数据类型转换允许定义定制的数据类型转换培训C#要求所有的运算符重载都声明为public和static,这表示它们与它们的类或结构相关联,而不是与实例相关联,所以运算符重载的代码体不能访问非静态类成员,也不能访问this标识符;操作符使用起来方便,但是不能够随便重载,一定要符合语境和一定的业务背景。对于比较运算符==,!=,,,=,=,重载操作符时一定要成对的重载,比如打比方重载了==,那么!=也必须重载!培训运算符重载-续重载一元运算符重载二元运算符重载关系运算符重载布林判断重载逻辑运算符培训运算符重载-续重载一元运算符重载二元运算符重载关系运算符重载布林判断重载逻辑运算符培训//重载一元运算符publicstaticCoordinateoperator++(Coordinateop1){op1.x++;op1.y++;returnop1;}publicstaticCoordinateoperator--(Coordinateop1){op1.x--;op1.y--;returnop1;}培训运算符重载-续重载一元运算符重载二元运算符重载关系运算符重载布林判断重载逻辑运算符培训//重载二元运算符publicstaticCoordinateoperator+(Coordinateop1,Coordinateop2){Coordinateresult=newCoordinate();result.x=op1.x+op2.x;result.y=op1.y+op2.y;returnresult;}publicstaticCoordinateoperator+(Coordinateop1,intop2){Coordinateresult=newCoordinate();result.x=op1.x+op2;result.y=op1.y+op2;returnresult;}publicstaticCoordinateoperator*(Coordinateop1,Coordinateop2){Coordinateresult=newCoordinate();result.x=op1.x*op2.x;result.y=op1.y*op2.y;returnresult;}培训运算符重载-续重载一元运算符重载二元运算符重载关系运算符重载布尔判断重载逻辑运算符培训//重载关系运算符publicstaticbooloperator(Coordinateop1,Coordinateop2){if(op1.xop2.x&&op1.yop2.y){returntrue;}else{returnfalse;}}publicstaticbooloperator(Coordinateop1,Coordinateop2){if(op1.xop2.x&&op1.yop2.y){returntrue;}else{returnfalse;}}==(Coordinateop1,Coordinateop2){if(op1.x==op2.x&&op1.y==op2.y){returntrue;}else{returnfalse;}}publicstaticbooloperator!=(Coordinateop1,Coordinateop2){if(op1.x!=op2.x&&op1.y!=op2.y){returntrue;}else{returnfalse;}}培训运算符重载-续重载一元运算符重载二元运算符重载关系运算符重载布林判断重载逻辑运算符培训//重载布林判断publicstaticbooloperatortrue(Coordinateop1){if(op1.x!=0||op1.y!=0){returntrue;}else{returnfalse;}}publicstaticbooloperatorfalse(Coordinateop1){if(op1.x==0&&op1.y==0){returntrue;}else{returnfalse;}}培训运算符重载-续重载一元运算符重载二元运算符重载关系运算符重载布尔判断重载逻辑运算符培训//重载逻辑运算符publicstaticbooloperator!(Coordinateop1){if(op1.x!=0&&op1.y!=0){returnfalse;}else{returntrue;}}publicstaticbooloperator&(Coordinateop1,Coordinateop2){if((op1.x!=0&&op1.y!=0)&(op2.x!=0&&op2.y!=0)){returntrue;}else{returnfalse;}}{publicstaticvoidMain(){Coordinatec0=newCoordinate(0,0);Coordinatec1=newCoordinate(3,5);Coordinatec2=newCoordinate(4,-3);Coordinatec3=c1+c2;Coordinatec4=c1-c2;Coordinatec5=c1*c2;Coordinatec6=c1/c2;Coordinatec7=c1++;Coordinatec8=c2--;boolb1=c7c8;boolb2=c6=c2;//…}}{publicstaticvoidMain(){//…if(c4)Console.WriteLine(c4至少有一个座标不为零。);elseConsole.WriteLine(c4所有座标都为零。);if(!c5)Console.WriteLine(c5所有座标都为零。);elseConsole.WriteLine(c5至少有一个座标不为零。);if(c3&c4)Console.WriteLine(c3和c4两个座标都不为零。);if(c7|c0)Console.WriteLine(c7和c1至少有一个座标不为零。);}}培训
本文标题:c# 运算符 重载
链接地址:https://www.777doc.com/doc-3630858 .html