运算符重载方便了我们对自定义类型(自定义的类或者结构体)的计算。

运算符重载关键字 operator。

除了这些运算符不支持:x.y、f(x)、new、typeof、default、checked、unchecked、delegate、is、as、=和=>,其他都支持。

如果是一元运算符,那么运算符重载的方法 参数只有一个;如果是二元运算符,其方法参数就是两个,三元就是三个

分别就是操作符所操作的对象了。比如 !MyDefineObject 其参数就是MyDefineObject。

在比如 MyPoint1+MyPoint2 其参数前后分别是 MyPoint1和MyPoint2。

例子如下:

public class MyPoint
{
private Point m_point; public MyPoint(int x,int y)
{
m_point = new Point(x,y);
} public static MyPoint operator+ (MyPoint pt,MyPoint pt2)
{
MyPoint ptNew = new MyPoint(pt.m_point.X + pt2.m_point.X, pt.m_point.Y + pt2.m_point.Y); return ptNew;
} public static MyPoint operator -(MyPoint pt, MyPoint pt2)
{
MyPoint ptNew = new MyPoint(pt.m_point.X - pt2.m_point.X, pt.m_point.Y - pt2.m_point.Y); return ptNew;
}
      //隐式转换
public static implicit operator Point (MyPoint pt)
{
return pt.m_point;
}
      //显示转换
public static explicit operator MyPoint(Point pt)
{
return new MyPoint(pt.X,pt.Y);
} public override string ToString()
{
return $"[{m_point.X},{m_point.Y}]";
}
}
 internal class Program
{
static void Main(string[] args)
{
MyPoint pt1=new MyPoint(10,10);
MyPoint pt2 = new MyPoint(5, 5); MyPoint ptAdd=pt1+ pt2; MyPoint ptMinus = pt1 - pt2; Console.WriteLine(pt1 + "+" + pt2 + "=" + ptAdd);
Console.WriteLine(pt1 + "-" + pt2 + "=" + ptMinus); Point pt3 = ptAdd; Point pt4 = new Point(555,555);
MyPoint pt5 = (MyPoint)pt4; Console.WriteLine($"pt3=[{pt3.X},{pt3.Y}]");
Console.WriteLine($"pt5={pt5}"); }
}

C# 使用 运算符重载 隐式转换 对Point进行加减计算的更多相关文章

  1. C++ operator重载运算符和隐式转换功能的实现

    C++ operator重载运算符和隐式转换功能的实现: #include <iostream> using namespace std; class OperatorTest { pub ...

  2. null的坑 和 比较运算符、相等运算符的隐式转换问题 (在javascript中,null>=0 为真,null<=0 为真,null==0却为假,null到底是什么?)

    null在关系运算中的坑 & 关系运算符的隐式转换问题 注意: 比较运算符 和 相等运算符 的 ECMAscript 语法实现不同. 比较运算符 和 相等运算符 对数据进行了隐式转换, 相当于 ...

  3. JavaScript:操作符:比较运算符及其隐式转换数据类型

    不等关系 即大于>:大于等于>=:小于<:小于等于<= 当比较的两个变量,有非数字时,会隐式转换为数字再比较,转换情况同算术运算符: 当两个变量均为字符串时,不会进行转换,而是 ...

  4. C# 转换符的重载 显示、隐式转换

    class Complex { //保存转换的值 Int32 v; public Complex(Int32 x) { v = x; } public Int32 ToInt32() { return ...

  5. 21.C++- "++"操作符重载、隐式转换之explicit关键字、类的类型转换函数

    ++操作符重载 ++操作符分为前置++和后置++,比如: ++a;  a++; ++操作符可以进行全局函数或成员函数重载 重载前置++操作符不需要参数 重载后置++操作符需要一个int类型的占位参数 ...

  6. C++ 语言中的重载、内联、缺省参数、隐式转换等机制展现了很多优点

    C++ 语言中的重载.内联.缺省参数.隐式转换等机制展现了很多优点,但是这些 优点的背后都隐藏着一些隐患.正如人们的饮食,少食和暴食都不可取,应当恰到好处. 我们要辨证地看待 C++的新机制,应该恰如 ...

  7. VB.Net隐式转换和显式转换的方法(转)

    VB.Net隐式转换和显式转换的方法(转) “隐式转换”不需要源代码中的任何特殊语法.在下面的示例中,在将 k 的值赋给 q 之前,Visual Basic 将该值隐式转换成单精度浮点值.   Dim ...

  8. 【校招面试 之 C/C++】第18题 C++ 中的隐式转换以及explicit关键字

    1.什么是隐式转换: 众所周知,C++的基本类型中并非完全的对立,部分数据类型之间是可以进行隐式转换的. 所谓隐式转换,是指不需要用户干预,编译器私下进行的类型转换行为.很多时候用户可能都不知道进行了 ...

  9. C++转换构造函数和隐式转换函数 ~ 转载

    原文地址: C++转换构造函数和隐式转换函数 用转换构造函数可以将一个指定类型的数据转换为类的对象.但是不能反过来将一个类的对象转换为一个其他类型的数据(例如将一个Complex类对象转换成doubl ...

  10. C++转换构造函数和隐式转换函数

    今天是第一次听到C++还有个转换构造函数,之前经常见到默认构造函数.拷贝构造函数.析构函数,但是从没听说过转换构造函数,隐式转换函数也是一样,C++的确是够博大精深的,再次叹服!          其 ...

随机推荐

  1. Nacos无法连接wsl2上部署的MySQL

    情况描述 在部署Nacos时,需要连接MySQL数据库管理数据,但是如果连接的是wsl2上部署的MySQL,使用127.0.0.1或者localhost,通常会出现如下错误: org.springfr ...

  2. openGauss内存引擎中的索引

    一.索引 索引是一种用于快速查询和检索数据的数据结构.常见的索引结构有: B 树, B+树和 Hash. 索引的作用就相当于目录的作用.打个比方: 我们在查字典的时候,如果没有目录,那我们就只能一页一 ...

  3. GAN的实现和一些问题

    GAN的学习是一个二人博弈问题,最终目标是达到纳什平衡.对抗指的是生成网络和判别网络的互相对抗.生成网络尽可能生成逼真样本,判别网络则尽可能去判别该样本是真实样本,还是生成的假样本.示意图如下: 生成 ...

  4. mmdetection使用wandb查看训练日志

    mmdetection查看日志之前一直是在用TextLoggerHook,已经觉得挺方便的了,自从用了wandb之后,发现wandb真不错,看log更方便了,回不去了. wandb的简单配置: wan ...

  5. java 后台获取文件上传的真实扩展名

    package common.util; import java.io.File; import org.apache.commons.io.FileUtils; import org.apache. ...

  6. 华为云CodeArts IDE For Python 快速使用指南

    本文分享自华为云社区<华为云CodeArts IDE For Python 快速使用指南>,作者:为云PaaS服务小智. CodeArts IDE 带有 Python 扩展,为 Pytho ...

  7. HarmonyOS NEXT应用开发—城市选择案例

    介绍 本示例介绍城市选择场景的使用:通过AlphabetIndexer实现首字母快速定位城市的索引条导航. 效果图预览 使用说明 分两个功能 在搜索框中可以根据城市拼音模糊搜索出相近的城市,例如输入& ...

  8. MaxCompute笛卡尔积逻辑的参数优化&复杂JOIN逻辑优化

    简介: 这篇文章主要讲一个SQL优化反映的两个优化点.分别是: 一.笛卡尔积逻辑的参数优化. 二.一个复杂JOIN逻辑的优化思路. 1.  优化概述 最近协助一个项目做下优化任务的工作.因为主要数据都 ...

  9. [FAQ] uni-app 如何让页面不展示返回箭头图标

    默认情况是,有历史上一页的 页面会在左上角展示返回图标. 比如登录页不想展示返回,在跳转进来时可以使用 uni.redirectTo({}),它能够关闭其它页面,这样当前页就不会有返回箭头了. Ref ...

  10. WPF 通过 InputManager 模拟调度触摸事件

    在 WPF 中,框架可以分为两个部分,一个是渲染,另一个是交互.交互的入口是在 InputManager 里面,而实际的交互实现需要通过渲染布局和交互的路由事件才能完成.在输入管理提供了调度事件的方法 ...