C# 使用 运算符重载 隐式转换 对Point进行加减计算
运算符重载方便了我们对自定义类型(自定义的类或者结构体)的计算。
运算符重载关键字 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进行加减计算的更多相关文章
- C++ operator重载运算符和隐式转换功能的实现
		
C++ operator重载运算符和隐式转换功能的实现: #include <iostream> using namespace std; class OperatorTest { pub ...
 - null的坑 和 比较运算符、相等运算符的隐式转换问题 (在javascript中,null>=0 为真,null<=0 为真,null==0却为假,null到底是什么?)
		
null在关系运算中的坑 & 关系运算符的隐式转换问题 注意: 比较运算符 和 相等运算符 的 ECMAscript 语法实现不同. 比较运算符 和 相等运算符 对数据进行了隐式转换, 相当于 ...
 - JavaScript:操作符:比较运算符及其隐式转换数据类型
		
不等关系 即大于>:大于等于>=:小于<:小于等于<= 当比较的两个变量,有非数字时,会隐式转换为数字再比较,转换情况同算术运算符: 当两个变量均为字符串时,不会进行转换,而是 ...
 - C#  转换符的重载  显示、隐式转换
		
class Complex { //保存转换的值 Int32 v; public Complex(Int32 x) { v = x; } public Int32 ToInt32() { return ...
 - 21.C++- "++"操作符重载、隐式转换之explicit关键字、类的类型转换函数
		
++操作符重载 ++操作符分为前置++和后置++,比如: ++a; a++; ++操作符可以进行全局函数或成员函数重载 重载前置++操作符不需要参数 重载后置++操作符需要一个int类型的占位参数 ...
 - C++ 语言中的重载、内联、缺省参数、隐式转换等机制展现了很多优点
		
C++ 语言中的重载.内联.缺省参数.隐式转换等机制展现了很多优点,但是这些 优点的背后都隐藏着一些隐患.正如人们的饮食,少食和暴食都不可取,应当恰到好处. 我们要辨证地看待 C++的新机制,应该恰如 ...
 - VB.Net隐式转换和显式转换的方法(转)
		
VB.Net隐式转换和显式转换的方法(转) “隐式转换”不需要源代码中的任何特殊语法.在下面的示例中,在将 k 的值赋给 q 之前,Visual Basic 将该值隐式转换成单精度浮点值. Dim ...
 - 【校招面试 之 C/C++】第18题 C++ 中的隐式转换以及explicit关键字
		
1.什么是隐式转换: 众所周知,C++的基本类型中并非完全的对立,部分数据类型之间是可以进行隐式转换的. 所谓隐式转换,是指不需要用户干预,编译器私下进行的类型转换行为.很多时候用户可能都不知道进行了 ...
 - C++转换构造函数和隐式转换函数 ~ 转载
		
原文地址: C++转换构造函数和隐式转换函数 用转换构造函数可以将一个指定类型的数据转换为类的对象.但是不能反过来将一个类的对象转换为一个其他类型的数据(例如将一个Complex类对象转换成doubl ...
 - C++转换构造函数和隐式转换函数
		
今天是第一次听到C++还有个转换构造函数,之前经常见到默认构造函数.拷贝构造函数.析构函数,但是从没听说过转换构造函数,隐式转换函数也是一样,C++的确是够博大精深的,再次叹服! 其 ...
 
随机推荐
- RabbitMQ 04 直连模式-Java操作
			
使用Java原生的方式使用RabbitMQ现在已经较少,但这是基础,还是有必要了解的. 引入依赖. <dependency> <groupId>com.rabbitmq< ...
 - 手工安装部署openGauss3.0一主一备(非om工具安装)
			
手工安装部署 openGauss3.0 一主一备(非 om 工具安装) 本文出处:https://www.modb.pro/db/425385 一.操作系统配置(centos7.6) 1.关闭防火墙 ...
 - HarmonyOS实现几种常见图片点击效果
			
一. 样例介绍 HarmonyOS提供了常用的图片.图片帧动画播放器组件,开发者可以根据实际场景和开发需求,实现不同的界面交互效果,包括:点击阴影效果.点击切换状态.点击动画效果.点击切换动效. 相关 ...
 - 可视化学习:使用WebGL绘制圆形,实现色盘
			
前言 在Canvas2D中实现圆形的绘制比较简单,只要调用arc指令就能在Canvas画布上绘制出一个圆形,类似的,在SVG中我们也只需要一个<circle>标签就能在页面上绘制一个圆形. ...
 - linux 性能自我学习 ———— 不可中断进程和僵尸进程 [四]
			
前言 简单介绍一下不可中断进程和僵尸进程. 正文 先来看下进程的状态: 那么这一列的状态是什么呢? R 是Running 或 Runnable 的缩写, 表示进程在cpu 的就绪队列中,正在运行或者正 ...
 - cv2在图像上画不同比例的锚框
			
''' cv2在图像上画不同比例的锚框 ''' import cv2 import math # 画宽高比1:1的锚框 def display_11_anchor(img,anchor_11_left ...
 - 高云GOWIN下载出现No devices found咋办
			
在使用GOWIN下载器下载会出现该类问题 No devices found错误. 原因如下: A . Windows10 系统会出现下载器通道顺序错误,所以要确保在 A 通道上. B.有一些 USB ...
 - javascript现代编程系列教程之五——正零和负零
			
在JavaScript中,正零(+0)和负零(-0)都代表数值0,它们在大多数情况下是等价的.然而,在某些特定的场景下,正零和负零的行为会有所不同. 除法操作:当0被用作除数时,正零和负零会产生不同的 ...
 - 本地使用ts配置
			
1.需要安装的依赖 "dependencies": { "html-webpack-plugin": "^5.5.0", "ts- ...
 - 「现代C++设计魅力」虚函数继承-thunk技术初探
			
简介:工作中使用LLDB调试器调试这一段C++多继承程序的时候,发现通过lldb print(expression命令的别名) 命令获取的指针地址和实际理解的C++的内存模型的地址不一样.那么到底是什 ...