一、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#语言特性-运算符重载的更多相关文章
-
c++中运算符重载
c++语言中运算符重载都是通过函数来实现的,所以其实质为函数重载,当c++语言原有的一个运算符被重载之后,它原来所具有的语义并没有消失,只相当于针对一个特定的类定义了一个新的运算符. <1> ...
-
【dart学习】之运算符重载
一,什么是运算符重载(operator overloading) 在软件开发过程中,运算符重载(英语:operator overloading)是多态的一种.运算符重载通常只是一种语法糖,这种语法对语 ...
-
Swift语言精要 - Operator(运算符重载)
运算符重载 Swift的这一语言特性或许应该启发于C++ class Vector2D { var x : Float = 0.0 var y : Float = 0.0 init (x : Floa ...
-
C++语言基础(17)-运算符重载
运算符重载的格式为: 返回值类型 operator 运算符名称 (形参表列){ //TODO: } 一.在类里面实例运行符重载 #include <iostream> using name ...
-
C++_基础_运算符重载2
内容: (1)只能用成员形式重载的运算符 (2)new/delete操作符的重载 (3)封装和继承的初识 (4)继承的特性 (5)子类及其函数的特性 (6)多重继承和虚继承 1.只能用成员形式重载的运 ...
-
C++学习之运算符重载的总结
C++学习之运算符重载的总结 运算符重载是对已有的运算符赋予多重含义,使同一个运算符作用域不同类型的数据导致不同行为的发生,C++为运算符重载提供了一种方法,即运算符重载函数 ...
-
Java 原始数据类型的计算:运算符重载(Operator Overload)和类型转换(Type Conversion)
原文阅读:<算法(第四版)>第一章 第一节:基础编程模型 有没有在面试的时候被问到:下面这几行代码的执行结果是什么?依据是什么? System.out.println (5/3); Sys ...
-
C/C++对bool operator <; (const p &;a)const的认识,运算符重载详解(杂谈)
下面来进行这段代码的分析: struct node { //定义一个结构体node(节点) int x; int y; int len; //node中有3个成员变量x,y,l ...
-
《Inside C#》笔记(十一) 运算符重载
运算符重载与之前的索引器类似,目的是为了让语言本身使用起来更方便直接,也是一种语法糖. 一 运算符重载(Operator Overloading) 运算符重载的存在,使得现有的各种运算符可以被重新定义 ...
随机推荐
-
TrueSkill 原理及实现
在电子竞技游戏中,特别是当有多名选手参加比赛的时候需要平衡队伍间的水平,让游戏比赛更加有意思.这样的一个参赛选手能力平衡系统通常包含以下三个模块: 一个包含跟踪所有玩家比赛结果,记录玩家能力的模块. ...
-
JAVA的面向对象编程--------课堂笔记
面向对象主要针对面向过程. 面向过程的基本单元是函数. 什么是对象:EVERYTHING IS OBJECT(万物皆对象) 所有的事物都有两个方面: 有什么(属性):用来描述对象. 能够做什么 ...
-
【leetcode❤python】 38. Count and Say
#-*- coding: UTF-8 -*- class Solution(object): def countAndSay(self, n): """ ...
-
JAVA敏捷开发环境搭建(转载)
前面介绍了创业型软件公司的工作模式,这里详细介绍下如何实施,第一步是先要搭建环境,有了环境才能开展工作. 整个软件项目分为四个环境 开发本地环境.开发环境.测试环境.IDC环境.和传统C++开发不一样 ...
-
spry菜单栏(一)
spry菜单栏使用教程 关于 Spry 框架 Spry 框架是一个 JavaScript 库,Web 设计人员使用它可以构建能够向站点访问者提供更丰富体验的 Web 页.有了 Spry,就可以使用 H ...
-
window环境下 node.js 游戏框架pomelo 安装与启动
一.软件准备 1.1 下载node.js 1.2 下载python 2.5 < version <3.0 1.3 下载c++编译器(一般控制面板中-->程序和功能上已有,如果没有需要 ...
-
kafka_2.11-2.0.0_介绍
1. JMS是什么 1.1. JMS的基础 JMS是什么:JMS是Java提供的一套技术规范 JMS干什么用:用来异构系统 集成通信,缓解系统瓶颈,提高系统的伸缩性增强系统用户体验,使得系统模块化和组 ...
-
mui卡片视图的制作
<!doctype html> <html> <head> <meta charset="UTF-8"> <title> ...
-
关于Firedac的一点看法
Firedac集成在Delphi中已经有几个版本了,偶尔也拖到Form上试着用用,虽然知道Firedac有可能是最终的(或很很长时间内)数据访问技术,可一直不能接受它,其中最大的原因就是过于“复杂” ...
-
spring converter-message 规则
spring 判断返回值使用哪个 converter 时,会执行两次converter 循环.. 第一次会根据 返回类型(converter的support方法) 和 mediaType 遍历所有co ...