一、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 ;
      if (this.X < p.X && this.Y < p.Y)
        return -;
      else
    return ;
  }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)<);}
   public static bool operator <(Point p1, Point p2){return (p1.CompareTo(p2)>);} public static bool operator >=(Point p1,Point p2){return (p1.CompareTo(p2)<=);}
public static bool operator <=(Point p1,Point p2){return(p1.CompareTo(p2)>=);}     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

}

C#语言特性-运算符重载的更多相关文章

  1. c++中运算符重载

    c++语言中运算符重载都是通过函数来实现的,所以其实质为函数重载,当c++语言原有的一个运算符被重载之后,它原来所具有的语义并没有消失,只相当于针对一个特定的类定义了一个新的运算符. <1> ...

  2. 【dart学习】之运算符重载

    一,什么是运算符重载(operator overloading) 在软件开发过程中,运算符重载(英语:operator overloading)是多态的一种.运算符重载通常只是一种语法糖,这种语法对语 ...

  3. 为什么Java不支持运算符重载?

    另一个类似棘手的Java问题.为什么 C++ 支持运算符重载而 Java 不支持? 有人可能会说+运算符在 Java 中已被重载用于字符串连接,不要被这些论据所欺骗.与 C++ 不同,Java 不支持 ...

  4. Swift语言精要 - Operator(运算符重载)

    运算符重载 Swift的这一语言特性或许应该启发于C++ class Vector2D { var x : Float = 0.0 var y : Float = 0.0 init (x : Floa ...

  5. C++语言基础(17)-运算符重载

    运算符重载的格式为: 返回值类型 operator 运算符名称 (形参表列){ //TODO: } 一.在类里面实例运行符重载 #include <iostream> using name ...

  6. C++_基础_运算符重载2

    内容: (1)只能用成员形式重载的运算符 (2)new/delete操作符的重载 (3)封装和继承的初识 (4)继承的特性 (5)子类及其函数的特性 (6)多重继承和虚继承 1.只能用成员形式重载的运 ...

  7. C++学习之运算符重载的总结

    C++学习之运算符重载的总结              运算符重载是对已有的运算符赋予多重含义,使同一个运算符作用域不同类型的数据导致不同行为的发生,C++为运算符重载提供了一种方法,即运算符重载函数 ...

  8. Java 原始数据类型的计算:运算符重载(Operator Overload)和类型转换(Type Conversion)

    原文阅读:<算法(第四版)>第一章 第一节:基础编程模型 有没有在面试的时候被问到:下面这几行代码的执行结果是什么?依据是什么? System.out.println (5/3); Sys ...

  9. C/C++对bool operator < (const p &a)const的认识,运算符重载详解(杂谈)

    下面来进行这段代码的分析: struct node {  //定义一个结构体node(节点)    int x;    int y;    int len;   //node中有3个成员变量x,y,l ...

随机推荐

  1. powerDesigner的初步使用

    今天初步学习了PowerDesigner,主要学习的内容有以下几个方面: 1.powerDesigner的功能之一是建立一个数据库的关系图,这里选用的数据库是MySql,基本的建立过程是这样的: a. ...

  2. .Net Framwork类库

    .NET Framework 类库是一个由类.接口和值类型组成的库,通过该库中的内容可访问系统功能.它是生成 .NET Framework 应用程序.组件和控件的基础.类库中的命名空间和命名空间类别在 ...

  3. Yii2版本号新特性简单介绍

    Yii2 Beta版本号在今年4月份公布.眼下正在改动问题和完好文档中. Yii2要求PHP版本号不低于5.4,主要有例如以下改进: 1)支持PHP框架间协作组制定的PSR-4标准,这简化了文件夹并提 ...

  4. 路冉的JavaScript学习笔记-2015年2月5日

    1.为Js原始值创建临时对象,并进行属性引用 var s="text"; s.len=4;//这里Js调用new String(s)的方法创建了一个临时对象,用来属性引用 cons ...

  5. RedHat Enterprise Linux 6.4使用Centos 6 的yum源 分类: 服务器搭建 Nginx 2015-07-14 14:11 5人阅读 评论(0) 收藏

    转载自:http://blog.sina.com.cn/s/blog_50f908410101cto6.html 思路:卸载redhat自带yum,然后下载centos的yum,安装后修改配置文件 1 ...

  6. Kivy A to Z -- 怎样从python代码中直接訪问Android的Service

    在Kivy中,通过pyjnius扩展能够间接调用Java代码,而pyjnius利用的是Java的反射机制.可是在Python对象和Java对象中转来转去总让人感觉到十分别扭.好在android提供了b ...

  7. android107 指针入门

    #include <stdio.h> #include <stdlib.h> //指针就是内存地址 //32为操作系统最大是4G内存,32为系统则是2的32次方, //所以只能 ...

  8. css 常见兼容性问题及解决方案

    css 兼容问题一直是困扰前端开发人员的大难题,提到兼容性立马想到了万恶的ie6,说多了都是泪,还是整理一些常见的兼容性问题以及解决的方案吧. 一. 浮动元素双边距. ①条件:ie6下,如果给元素设置 ...

  9. ant有什么用

    内容摘要: ANT是一个基于Java的自动化脚本引擎,脚本格式为XML.除了做Java编译相关任务外,ANT还可以通过插件实现很多应用的调用. 1)ANT的基本概念: 2)ANT的安装:解包,设置路径 ...

  10. DHCPv6 server port and DHCPv6 client port

    The DHCPv6 draft says that, the port numbers for client and agents are given as 546 & 547 在wires ...