博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
C#中的运算符重载
阅读量:5833 次
发布时间:2019-06-18

本文共 3176 字,大约阅读时间需要 10 分钟。

C# 允许用户自定义类型通过使用 operator 关键字定义静态成员函数来重载运算符。

注意:

  • 必须用public修饰,必须是类的静态的方法。
  • 重载相等运算符(==)时,还必须重载不相等运算(!=)。
  • < 和 > 运算符以及 <= 和 >= 运算符也必须成对重载。

可以重载的运算符:

  • 可以重载的一元运算符:+、-、!、~、++、--、true 和 false
  • 可以重载的二进制运算符:+, -, *, /, %, &, |, ^, <<, >>
  • 可以重载的比较运算符:==, !=, <, >, <=, >=

不能重载的运算符:

  • &&, || 条件逻辑运算符不能重载,但可使用能够重载的 & 和 | 进行计算。
  • []不能重载数组索引运算符,但可定义索引器。
  • ()不能重载转换运算符,但可定义新的转换运算符(请参见 explicit 和 implicit)。
  • +=, -=, *=, /=, %=, &=, |=, ^=, <<=, >>=赋值运算符不能重载,但 += 可使用 + 计算
  • =、.、?:、->、new、is、sizeof 和 typeof 不能重载这些运算符。

注意:

  • 若要在自定义类中重载运算符,您需要在该类中创建具正确签名的方法。该方法必须命名为“operator X”,其中 X 是正在重载的运算符的名称或符号。
  • 一元运算符具有一个参数,二元运算符具有两个参数。
  • 在每种情况下,参数的类型必须与声明运算符的类或结构的类型相同。

 下面是个人写的一小段练习代码:

1 /* 设计一个复数类(Complex), 2  * 包含两个字段(实部x和虚部y), 3  * 对运算符进行重载,实现两个 4  * 复数的加法和减法运算、 5  * 以及判断两个复数是否一致 6  */ 7  8 using System; 9 using System.Collections.Generic;10 using System.Linq;11 using System.Text;12 13 namespace homeWork414 {15     class Program16     {17         static void Main(string[] args)18         {19             Complex com1, com2, com3;20             com1 = new Complex(1, 4);21             com2 = new Complex(2, 6);22             com3 = new Complex();23             com3 = com1 + com2;24             Console.WriteLine(com1 + " + " + com2 + " = " + com3);25             com3 = com1 - com2;26             Console.WriteLine(com1 + " - " + com2 + " = " + com3);27             if (com1 == com2)28                 Console.WriteLine("com1和com2一致");29             else30                 Console.WriteLine("com1和com2不一致");31             Console.ReadKey();32         }33     }34 35     class Complex36     {37         public double x, y;38         public Complex()39         { x = y = 0; }40         public Complex(double x, double y)41         {42             this.x = x;43             this.y = y;44         }45         public static Complex operator +(Complex comp1, Complex comp2)46         {47             Complex comp = new Complex();48             comp.x = comp1.x + comp2.x;49             comp.y = comp1.y + comp2.y;50             return comp;51         }52         public static Complex operator -(Complex comp1, Complex comp2)53         {54             Complex comp = new Complex();55             comp.x = comp1.x - comp2.x;56             comp.y = comp1.y - comp2.y;57             return comp;58         }59         public override string ToString()60         {61             return "(" + x + "," + y + ")";62         }63         public static bool operator ==(Complex c1, Complex c2)64         {65             //将c1对象转为object再进行判断  66             //这里的object.Equals(c1, null)也可以写成  67             //c1 as object == null  68             if (object.Equals(c1, null) || object.Equals(c2, null))69             {70                 return object.Equals(c1, c2);71             }72             return c1.x == c2.x && c1.y == c2.y;73         }74 75         public static bool operator !=(Complex c1, Complex c2)76         {77             if (object.Equals(c1, null) || object.Equals(c2, null))78             {79                 return !object.Equals(c1, c2);80             }81             return c1.x != c2.x || c1.y != c2.y;82         }83     };84 }

 

作者:耑新新,发布于   

转载请注明出处,欢迎邮件交流:

转载于:https://www.cnblogs.com/Amedeo/p/6087412.html

你可能感兴趣的文章
win8 关闭防火墙
查看>>
CSS——(2)与标准流盒模型
查看>>
C#中的Marshal
查看>>
linux命令:ls
查看>>
Using RequireJS in AngularJS Applications
查看>>
【SAP HANA】关于SAP HANA中带层次结构的计算视图Cacultation View创建、激活状况下在系统中生成对象的研究...
查看>>
DevOps 前世今生 | mPaaS 线上直播 CodeHub #1 回顾
查看>>
iOS 解决UITabelView刷新闪动
查看>>
CentOS 7 装vim遇到的问题和解决方法
查看>>
JavaScript基础教程1-20160612
查看>>
【ros】Create a ROS package:package dependencies报错
查看>>
通过容器编排和服务网格来改进Java微服务的可测性
查看>>
使用《Deep Image Prior》来做图像复原
查看>>
Linux基础命令---rmdir
查看>>
Squid 反向代理服务器配置
查看>>
Java I/O操作
查看>>
Tomcat性能调优
查看>>
Android自学--一篇文章基本掌握所有的常用View组件
查看>>
灰度图像和彩色图像
查看>>
FreeMarker-Built-ins for strings
查看>>