当前位置: 首页 > news >正文

C#(11) 运算符重载

前言

我们知道函数是可以重载的,重载后的作用是干嘛呢?其实就是为了方便适应不同的参数传递。

那运算符我们也可以理解是一个函数,只是我们希望为更多的参数引入运算符使得他们可以被计算。

c#设计这么一块功能,其实也是为了方便我们在某些地方可以更快捷的使用不同的运算符。

概念

让自定义类和结构体能够使用运算符的一种概念。

关键字:operator

特点

  1. 一定是一个公共的静态方法
  2. 返回值写在operator前面
  3. 逻辑自定义

作用:让自定义类和结构体对象之间可以进行运算

tips:

  1. 条件运算符必须成对实现
  2. 一个运算符可以有多个重载
  3. 不能使用ref和out

基本语法

public static 返回值类型 operator 运算符(参数列表)

 示例和使用

我们在游戏中经常会遇到要进行坐标之间的运算,所以这里干脆直接我们就来实现一个坐标之间的运算符重载,博主将主要经常用的方法已经给你写好了,留下的任务一是让你去体验一下他的整体过程,取反的话相对来说复杂一些,可以选做。

using System;namespace CoordinateOperatorOverloading
{class Coordinate{public int X { get; set; }public int Y { get; set; }public Coordinate(int x, int y){X = x;Y = y;}// 重载 + 运算符public static Coordinate operator +(Coordinate c1, Coordinate c2){return new Coordinate(c1.X + c2.X, c1.Y + c2.Y);}// 重载 - 运算符public static Coordinate operator -(Coordinate c1, Coordinate c2){return new Coordinate(c1.X - c2.X, c1.Y - c2.Y);}// 重载 * 运算符(坐标与常数相乘)public static Coordinate operator *(Coordinate c, int scalar){return new Coordinate(c.X * scalar, c.Y * scalar);}// 重载 * 运算符(常数与坐标相乘)public static Coordinate operator *(int scalar, Coordinate c){return new Coordinate(c.X * scalar, c.Y * scalar);}// 重载 ++ 运算符(前缀)public static Coordinate operator ++(Coordinate c){return new Coordinate(c.X + 1, c.Y + 1);}// 重载 -- 运算符(前缀)public static Coordinate operator --(Coordinate c){return new Coordinate(c.X - 1, c.Y - 1);}// 重载 ToString 方法public override string ToString(){return $"({X}, {Y})";}//任务:增加重载比较运算符的方法//选做任务:增加取反:包括x单独取反,y单独取反,xy同时取反}class Program{static void Main(string[] args){Coordinate c1 = new Coordinate(3, 5);Coordinate c2 = new Coordinate(2, 4);Coordinate addition = c1 + c2;Coordinate subtraction = c1 - c2;Coordinate multiplication1 = c1 * 2;Coordinate multiplication2 = 3 * c2;Coordinate increment = ++c1;Coordinate decrement = --c2;Console.WriteLine($"Addition: {addition}");Console.WriteLine($"Subtraction: {subtraction}");Console.WriteLine($"Multiplication1: {multiplication1}");Console.WriteLine($"Multiplication2: {multiplication2}");Console.WriteLine($"Increment: {increment}");Console.WriteLine($"Decrement: {decrement}");}}
}

不仅要看懂,更要多多去敲代码。

可重载和不可重载的运算符

可重载算术:+,-,*,/   逻辑:!  位:|, &, ^, ~, >> ,<< 条件> <(需要成对实现) 
不可重载&& ,|| ,[] ,() ,点 . ,三目运算符 ,?= ,=,??

有些运算符你可能没见过,可以自己手动查一查。

总结

运算符重载的知识点不算难,其实就是记住一个关键词加使用范围就可以了。

这也算核心中补的一个小知识点,在未来你对某些复杂结构体之间的计算使用还是有一定的帮助的。

多说无益,还是需要脚踏实地。

c#是你学好unity开发的基础。

请期待我的下一篇博客!

我来自佑梦游戏开发,感谢你的关注和收藏!

http://www.lryc.cn/news/489992.html

相关文章:

  • Linux下Intel编译器oneAPI安装和链接MKL库编译
  • 【通俗理解】ELBO(证据下界)——机器学习中的“情感纽带”
  • php 使用mqtt
  • STM32学习笔记-----什么是同步/异步/全双工/半双工/单工?
  • 网络安全之内网安全
  • Odoo中,要实现实时数据推送,SSE 与 WebSocket 该如何选择
  • CTF--php伪协议结合Base64绕过
  • 设计模式-创建型-抽象工厂模式
  • Hadoop 系列 MapReduce:Map、Shuffle、Reduce
  • Axios 响应拦截器与未登录状态的统一处理
  • 深度学习每周学习总结J6(ResNeXt-50 算法实战与解析 - 猴痘识别)
  • Flask 中的 `url_for` 使用指南
  • xiaolin coding 图解网络笔记——HTTP篇
  • Oracle热备过程中对数据库崩溃的处理方法
  • 【phpseclib】 PHP 使用加密算法 RSA、DES、AES等
  • 【ubuntu】开机进入initramfs,无法开机
  • ECLAIR:利用基础模型实现企业自动化
  • The Yarn application application_xxx_xxx doesn‘t exist in RM
  • elasticsearch介绍和部署
  • Flutter之使用mqtt进行连接和信息传输的使用案例
  • 汽车HiL测试:利用TS-GNSS模拟器掌握硬件性能的仿真艺术
  • 【MyBatisPlus·最新教程】包含多个改造案例,常用注解、条件构造器、代码生成、静态工具、类型处理器、分页插件、自动填充字段
  • 前端知识点---rest(javascript)
  • 13. 猜最大公约数最小公倍数小游戏
  • Git 多仓库提交用户信息动态设置
  • 2024.6使用 UMLS 集成的基于 CNN 的文本索引增强医学图像检索
  • 了解Redis(第一篇)
  • UE5 第一人称射击项目学习(二)
  • npm/cnpm的使用
  • go-zero(六) JWT鉴权