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

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

一、C#当中可以进行重载和不可重载的运算符:

1.简单的说明:

 

  1.从上图中可以看到,可以重载的和不可以进行重载的运算符,比较特殊的是第二行和倒数第三行,的运算符,为什么会说它们特殊,是因为(第三行)在这一行当中,不能重载当中的一个运算符,必须成对的重载,什么意思呢,比如:== 和!= 这两个运算符,你必须要都进行重载才可以,不然编译器会提示让你添加(会报错的)剩下的那几个运算符>< <=>=之类的也是一样的,必须要成对的重载;

  2.第三行说完了来说说倒数第二行,他特殊的地方是比如:你重载了+运算符,那么对就的+=运算符也会自动的添加实现,不用你显示的去重载,.NET已经自动的生成了,当然-也是一样的;

  3.不能重载的运算符上图也标记了;

 

2.代码例子:

想了半天最后还是觉的书上的例子《C#高级编程第五版》的例子比较好:

public class Point:IComparable{    public int X{
get;set;}    public int Y{
get;set;}    public Point(int xPos,int yPos){X = xPost; Y=yPos;}    public Point(){}    //重写Equals方法与GetHashCode方法      public override bool Equals(object obj){
return obj.ToString() == this.ToString();}    public override int GetHashCode(){
return this.ToString().GetHashCode();}    //实现Icomparable比较方法    public int CompareTo(object obj){      if (obj is Point){        Point p = (Point)obj;      if (this.X > p.X && this.Y > p.Y)        return 1;      if (this.X < p.X && this.Y < p.Y)        return -1;      else    return 0;  }else    throw new ArgumentException();  }     //+-运算符重载    public static Point operator +(Point p1,Point p2){
return new Point(p1.X+p2.X,p1.Y+p2.Y);}    public static Point operator -(Point p1,Point p2){
return new Point(p1.X-p2.X,p1.Y-p2.Y);}    //== !=运算符重载***必须要成对的重载这两个运算符    public static Point operator ==(Point p1,Point p2){
return p1.Equals(p2);}    public static Point operator !=(Point p1,Point p2){
return !p1.Equals(p2);}    //一元运算符的重载:++,--    public static Point operator ++(Point p1){
return new Point(p1.X++,p1.Y++);}    public static Point operator --(Point p1){
return new Point(p1.X--,p1.Y--);}    //对>< ,<=,>=运算符进行重载    public static bool operator >(Point p1,Point p2){ return (p1.CompareTo(p2)<0);}   public static bool operator <(Point p1, Point p2){
return (p1.CompareTo(p2)>0);} public static bool operator >=(Point p1,Point p2){
return (p1.CompareTo(p2)<=0);} public static bool operator <=(Point p1,Point p2){
return(p1.CompareTo(p2)>=0);}     public override string ToString(){return string.Format("X:{0} Y:{0}",X,Y);}}

 

下面就是测试的例子:

static void Main(string[] args)

{

  Point p1 = new Point(10,20);

  Point p2 = new Point(30,40);

  Console.WrilteLine((p1+p2).ToString()); //X:40 Y:60

}

 

转载于:https://www.cnblogs.com/flay/p/4763617.html

你可能感兴趣的文章
08.CXF发布WebService(Java项目)
查看>>
java-集合框架
查看>>
RTMP
查看>>
求一个数的整数次方
查看>>
点云PCL中小细节
查看>>
铁路信号基础
查看>>
RobotFramework自动化2-自定义关键字
查看>>
CMU Bomblab 答案
查看>>
2016 - 1 -17 GCD学习总结
查看>>
linux安装php-redis扩展(转)
查看>>
技术分析淘宝的超卖宝贝
查看>>
i++和++1
查看>>
react.js
查看>>
P1313 计算系数
查看>>
NSString的长度比较方法(一)
查看>>
Azure云服务托管恶意软件
查看>>
My安卓知识6--关于把项目从androidstudio工程转成eclipse工程并导成jar包
查看>>
旧的起点(开园说明)
查看>>
生产订单“生产线别”带入生产入库单
查看>>
crontab导致磁盘空间满问题的解决
查看>>