代码如下:

  /// <summary>
/// 坐标(结构类型)
/// </summary>
public struct Coordinate
{
public int x;
public int y; public Coordinate(int x, int y)
{
this.x = x;
this.y = y;
} /// <summary>
/// 对象存在于集合中
/// </summary>
/// <param name="list"></param>
/// <returns></returns>
public bool IsOneOf(List<Coordinate> list)
{
if (list.IndexOf(this) >= )
{
return true;
}
return false;
} /// <summary>
/// 比较两个坐标相等
/// </summary>
/// <param name="c"></param>
/// <returns></returns>
public override bool Equals(object c)
{
if (c.GetType() != this.GetType())
return false; Coordinate coordinate = (Coordinate)c; if (this.x != coordinate.x)
return false; if (this.y != coordinate.y)
return false; return true;
} /// <summary>
/// 比较两个坐标相等
/// </summary>
/// <param name="lhs"></param>
/// <param name="rhs"></param>
/// <returns></returns>
public static bool operator ==(Coordinate lhs, Coordinate rhs)
{
return lhs.Equals(rhs);
} /// <summary>
/// 比较两个坐标不相等
/// </summary>
/// <param name="lhs"></param>
/// <param name="rhs"></param>
/// <returns></returns>
public static bool operator !=(Coordinate lhs, Coordinate rhs)
{
return !lhs.Equals(rhs);
} /// <summary>
/// 两个坐标相加,获得新坐标
/// </summary>
/// <param name="lhs"></param>
/// <param name="rhs"></param>
/// <returns></returns>
public static Coordinate operator +(Coordinate lhs, Coordinate rhs)
{
return new Coordinate()
{
x = lhs.x + rhs.x,
y = lhs.y + rhs.y
};
} /// <summary>
/// 两个坐标象减,获得新坐标
/// </summary>
/// <param name="lhs"></param>
/// <param name="rhs"></param>
/// <returns></returns>
public static Coordinate operator -(Coordinate lhs, Coordinate rhs)
{
return new Coordinate()
{
x = lhs.x - rhs.x,
y = lhs.y - rhs.y
};
} public override int GetHashCode()
{
return base.GetHashCode();
}
}

使用如下

            Coordinate coor1 = new Coordinate(10, 20);
Coordinate coor2 = new Coordinate(20, 30);
Console.WriteLine("coor1 == coor2:{0}", coor1 == coor2);
var coor3 = coor2 - coor1;
Console.WriteLine("coor2 - coor1获得新坐标【X:{0}】【Y:{1}】", coor3.x, coor3.y);
coor3 = coor2 + coor1;
Console.WriteLine("coor2 + coor1获得新坐标【X:{0}】【Y:{1}】", coor3.x, coor3.y);

 运行结果:

.NET重载运算符的更多相关文章

  1. c++的重载运算符

    c++中允许重载运算符: 这是我辛苦的结果 #include"iostream"using namespace std;class aaa{ int x;public: aaa() ...

  2. C# 重载运算符

    如果你想让自己定义的类型可以用运算符进行运算,那么可以通过重载运算符来实现: 示例: class Salary { public int RMB { get; set; } public static ...

  3. 【STL】重载运算符

    重载运算符 为什么要重载运算符: C++中预定义的运算符的操作对象只能是基本数据类型.但实际上,对于许多用户自定义类型(例如结构体),也需要类似的运算操作.这时就必须在C++中重新定义这些运算符,赋予 ...

  4. c++中有些重载运算符为什么要返回引用

    事实上,我们的重载运算符返回void.返回对象本身.返回对象引用都是可以的,并不是说一定要返回一个引用,只不过在不同的情况下需要不同的返回值. 那么什么情况下要返回对象的引用呢? 原因有两个: 允许进 ...

  5. C++ Primer : : 第十四章 : 重载运算符与类型转换之类型转换运算符和重载匹配

    类型转换运算符 class SmallInt { public: SmallInt(int i = 0) : val(i) { if (i < 0 || i > 255) throw st ...

  6. C++ Primer : 第十四章 : 重载运算与类型转换之重载运算符

    重载前须知 重载运算符是特殊的函数,它们的名字由operator和其后要重载的运算符号共同组成. 因为重载运算符时函数, 因此它包含返回值.参数列表和函数体. 对于重载运算符是成员函数时, 它的第一个 ...

  7. C#基础知识系列一(goto、i++、三元运算符、ref和out、String和string、重载运算符)

    前言 这两天在网上看到的总结很多,尤其是博客园中的,很多很多,也给了我很多的启发,当然自己也总结过,而且有很多人也给与我一些意见和看法.不管怎样,自己还是先把所谓的基础知识加强巩固下吧. 2014年的 ...

  8. c++重载运算符注意

    c++重载运算符的时候加&或不加: 如果加了&表示引用,说明用的都是同一块内存.如果不加,那么用的就是一份拷贝,即不同的内存. 一般连续操作的时候要加&. 可以重新定义一个对象 ...

  9. C++学习27 用全局函数重载运算符

    运算符重载函数既可以声明为类的成员函数,也可以声明为所有类之外的全局函数. 运算符重载函数作为类的成员函数 将运算符重载函数声明为类的成员函数时,二元运算符的参数只有一个,一元运算符不需要参数.之所以 ...

  10. Chapter14:重载运算符

    对于一个运算符函数来说,它或者是类的成员,或者至少含有一个类类型的参数. int operator+(int, int);//错误,不能为int重定义内置运算符 对于一个重载的运算符来说,其优先级和结 ...

随机推荐

  1. 利用SQL注入漏洞登录后台的实现方法

    利用SQL注入漏洞登录后台的实现方法 作者: 字体:[增加 减小] 类型:转载 时间:2012-01-12我要评论 工作需要,得好好补习下关于WEB安全方面的相关知识,故撰此文,权当总结,别无它意.读 ...

  2. C#设计模式——解释器模式(Interpreter Pattern)

    一.概述 在软件开发特别是DSL开发中常常需要使用一些相对较复杂的业务语言,如果业务语言使用频率足够高,且使用普通的编程模式来实现会导致非常复杂的变化,那么就可以考虑使用解释器模式构建一个解释器对复杂 ...

  3. LPC2478调试___ads常见错误分析

    进行ADS外部RAM进行仿真调试过程中,出现常见错误“entry point lies  outside the image" 原因为程序空间超出范围,需要修改一个参数. 解决方法:首先在Z ...

  4. oracle-关于dual

    来源:百度知道1. dual 是一张表.是一张只有一个字段,一行记录的表. 2.习惯上,我们称之为'伪表'.因为他不存储主题数据.3. 他的存在,是为了操作上的方便.因为select 都是要有特定对象 ...

  5. JOST数据 日期转换

    开发中有时候需要从服务器端返回json格式的数据,在后台代码中如果有DateTime类型的数据使用系统自带的工具类序列化后将得到一个很长的数字表示日期数据,如下所示: 复制代码代码如下: //设置服务 ...

  6. 【MySQL】 GTID使用

    参考:http://hcymysql.blog.51cto.com/5223301/1579197 参考:http://blog.itpub.net/29733787/viewspace-146255 ...

  7. JuqeryResize

    //添加 (function ($, h, c) { var a = $([]), e = $.resize = $.extend($.resize, {}), i, k = "setTim ...

  8. Webservice简介

    一.序言 大家或多或少都听过WebService(Web服务),有一段时间很多计算机期刊.书籍和网站都大肆的提及和宣传WebService技术,其中不乏很多吹嘘和做广告的成分.但是不得不承认的是Web ...

  9. avalon源码分析(转)

    avalon源码分析目录 第一篇 : 关于前端的MVVM架构 第二篇 : 初步接触 第三篇 : 执行流程1 第四篇 :  执行流程2 第五篇 : 整体架构 第六篇 : ViewModel  第七篇 : ...

  10. 自动检测浏览器是手机还是pc

    function CheckBrower() { if (/(iPhone|iPad|iPod|iOS)/i.test(navigator.userAgent)) { //判断iPhone|iPad| ...