当前位置: 首页 > 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开发的基础。

请期待我的下一篇博客!

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

相关文章:

C#(11) 运算符重载

前言 我们知道函数是可以重载的&#xff0c;重载后的作用是干嘛呢&#xff1f;其实就是为了方便适应不同的参数传递。 那运算符我们也可以理解是一个函数&#xff0c;只是我们希望为更多的参数引入运算符使得他们可以被计算。 c#设计这么一块功能&#xff0c;其实也是为了方…...

Linux下Intel编译器oneAPI安装和链接MKL库编译

参考: https://blog.csdn.net/qq_44263574/article/details/123582481 官网下载: https://www.intel.com/content/www/us/en/developer/tools/oneapi/base-toolkit-download.html?packagesoneapi-toolkit&oneapi-toolkit-oslinux&oneapi-linoffline 填写邮件和国家,…...

【通俗理解】ELBO(证据下界)——机器学习中的“情感纽带”

【通俗理解】ELBO&#xff08;证据下界&#xff09;——机器学习中的“情感纽带” 关键词提炼 #ELBO #证据下界 #变分推断 #机器学习 #潜变量模型 #KL散度 #期望 #对数似然 第一节&#xff1a;ELBO的类比与核心概念【尽可能通俗】 ELBO&#xff0c;即证据下界&#xff0c;在…...

php 使用mqtt

在 Webman 框架中使用 MQTT 进行消息的发布和订阅&#xff0c;你可以借助 PHP 的 MQTT 客户端库&#xff0c;比如 phpMQTT。以下是一个简单的示例&#xff0c;展示了如何在 Webman 中使用 MQTT 发布和订阅消息。 安装 phpMQTT 首先&#xff0c;你需要通过 Composer 安装 phpMQ…...

STM32学习笔记-----什么是同步/异步/全双工/半双工/单工?

在通信系统中&#xff0c;同步、异步、全双工、半双工和单工是描述数据传输方式的重要概念。在STM32微控制器中&#xff0c;这些概念广泛应用于串行通信&#xff08;如USART、SPI和I2C协议&#xff09;中。接下来&#xff0c;我会详细解释这些术语&#xff0c;并特别关注STM32中…...

网络安全之内网安全

下面给出了应对企业内网安全挑战的10种策略。这10种策略即是内网的防御策略&#xff0c;同时也是一个提高大型企业网络安全的策略。 1、注意内网安全与网络边界安全的不同 内网安全的威胁不同于网络边界的威胁。网络边界安全技术防范来自Internet上的攻击&#xff0c;主要是防…...

Odoo中,要实现实时数据推送,SSE 与 WebSocket 该如何选择

目录 1. 技术特点对比 2. 使用场景 适合使用 SSE 的场景&#xff1a; 适合使用 WebSocket 的场景&#xff1a; 3. 优缺点总结 SSE 优点&#xff1a; SSE 缺点&#xff1a; WebSocket 优点&#xff1a; WebSocket 缺点&#xff1a; 4. 选择建议 选择 SSE 的条件&#x…...

CTF--php伪协议结合Base64绕过

Base64绕过 在ctf中&#xff0c;base64是比较常见的编码方式&#xff0c;在做题的时候发现自己对于base64的编码和解码规则不是很了解&#xff0c;并且恰好碰到了类似的题目&#xff0c;在翻阅了大佬的文章后记录一下&#xff0c;对于base64编码的学习和一个工具 base64编码是…...

设计模式-创建型-抽象工厂模式

1.概念 工厂方法模式只能生产一个产品系列&#xff0c;抽象工厂可以生产多个产品系列 2.作用 多个具体产品组成一个产品族&#xff08;产品系列&#xff09;&#xff0c;一个具体工厂负责生产一个产品族 3.应用场景 系统所需产品间由依赖关系&#xff0c;可以划分为同一产…...

Hadoop 系列 MapReduce:Map、Shuffle、Reduce

文章目录 前言MapReduce 基本流程概述MapReduce 三个核心阶段详解Map 阶段工作原理 Shuffle 阶段具体步骤分区&#xff08;Partition&#xff09;排序&#xff08;Sort&#xff09;分组&#xff08;Combine 和 Grouping&#xff09; Reduce 阶段工作原理 MapReduce 应用场景Map…...

Axios 响应拦截器与未登录状态的统一处理

目录 前言1. 响应拦截器的作用与应用场景1.1 什么是响应拦截器&#xff1f;1.2 响应拦截器的应用场景 2. 代码解读&#xff1a;响应拦截器中的未登录处理2.1 原始代码分析 3. 完善未登录处理逻辑3.1 未登录状态的用户体验优化3.2 改进后的代码实现 4. 实践中的场景4.1 登录态的…...

深度学习每周学习总结J6(ResNeXt-50 算法实战与解析 - 猴痘识别)

&#x1f368; 本文为&#x1f517;365天深度学习训练营 中的学习记录博客&#x1f356; 原作者&#xff1a;K同学啊 | 接辅导、项目定制 目录 0. 总结ResNeXt基本介绍 1. 设置GPU2. 导入数据及处理部分3. 划分数据集4. 模型构建部分5. 设置超参数&#xff1a;定义损失函数&…...

Flask 中的 `url_for` 使用指南

在 Flask 中&#xff0c;url_for 是一个强大的工具&#xff0c;用于动态生成 URL。相比硬编码路径&#xff0c;url_for 更加灵活且便于维护。以下是其常见用法和技巧。 基本用法 url_for 根据 视图函数名称 和 动态参数 生成 URL。例如&#xff1a; from flask import Flask,…...

xiaolin coding 图解网络笔记——HTTP篇

1. HTTP 是什么&#xff1f; HTTP 是超文本传输协议&#xff08;HyperText Transfer Protocol&#xff09;&#xff0c;一个用在计算机世界里专门在【两点】之间【传输】文字、图片、音频、视频等【超文本】数据的【约定和规范】。 2. HTTP 常见的状态码有哪些&#xff1f; …...

Oracle热备过程中对数据库崩溃的处理方法

引言 在热备过程中如果发生数据库崩溃、断电等情况该如何处理? 如果正在备份 users 表空间的数据文件过程中,此时的数据文件表头 SCN 会被锁定,此时正在复制数据文件时数据库崩溃,系统断电。 从而导致数据文件表头与控制文件中的不一致,导致数据库无法打开,会要求介质恢…...

【phpseclib】 PHP 使用加密算法 RSA、DES、AES等

一、Composer 下载 phpseclib # 我使用的是 phpseclib3 composer require phpseclib/phpseclib二、RSA 加密解密 // 我使用的是 phpseclib3use phpseclib3\Crypt\RSA;$type PKCS8; // 看需求选其一, PKCS8 | PKCS1 | JWK | MSBLOB | OpenSSH | PSS | PuTTY | Raw | WML $rsa…...

【ubuntu】开机进入initramfs,无法开机

Step 1 blkid查看 ext4 的磁盘 Step 2 找到TYPE"EXT4"的盘&#xff0c;我们此处是 /dev/mapper/ubuntu–vg-ubuntu–lv,fsck命令是用于检查和修复Linux文件系统中的错误。通过使用-t参数指定文件系统类型&#xff08;例如ext4&#xff09;。我们使用如下命令进行…...

ECLAIR:利用基础模型实现企业自动化

人工智能咨询培训老师叶梓 转载标明出处 尽管流程自动化的概念已经存在了几十年&#xff0c;但实现端到端工作流程自动化的最终愿景仍然难以捉摸。斯坦福大学的研究人员提出了一种新的解决方案——ECLAIR系统&#xff0c;旨在通过最少的人工监督实现企业工作流程的自动化。 EC…...

The Yarn application application_xxx_xxx doesn‘t exist in RM

本文主要解决flink在standalone模式下&#xff0c;flink run却一直使用yarn-session模式的问题。 问题 有个客户找到笔者&#xff0c;问题是报错如下: 分析 笔者先从环境入手&#xff0c;首先要确定的是flink是使用了什么模式。确认过后是使用standalone模式。 那就很奇怪&a…...

elasticsearch介绍和部署

1 elasticsearch介绍 Elasticsearch 是一个分布式、高扩展、高实时的搜索与数据分析引擎。可以很方便的使大量数据具有搜索、分析和探索的能力。充分利用Elasticsearch的水平伸缩性。Elasticsearch 的实现原理主要分为以下几个步骤&#xff0c;首先用户将数据提交到Elasticsea…...

Flutter之使用mqtt进行连接和信息传输的使用案例

目录 引言 什么是MQTT&#xff1f; 在Flutter中使用MQTT 安装 iOS 安卓 创建一个全局的客户端对象 配置客户端对象 连接&#xff08;异步&#xff09; 监听接受的消息 发送消息 监听连接状态和订阅的回调 引言 随着移动应用开发技术的发展&#xff0c;实时通信成为…...

汽车HiL测试:利用TS-GNSS模拟器掌握硬件性能的仿真艺术

一、汽车HiL测试的概念 硬件在环&#xff08;Hardware-in-the-Loop&#xff0c;简称HiL&#xff09;仿真测试&#xff0c;是模型基于设计&#xff08;Model-Based Design&#xff0c;简称MBD&#xff09;验证流程中的一个关键环节。该步骤至关重要&#xff0c;因为它整合了实际…...

【MyBatisPlus·最新教程】包含多个改造案例,常用注解、条件构造器、代码生成、静态工具、类型处理器、分页插件、自动填充字段

文章目录 一、MyBatis-Plus简介二、快速入门1、环境准备2、将mybatis项目改造成mybatis-plus项目&#xff08;1&#xff09;引入MybatisPlus依赖&#xff0c;代替MyBatis依赖&#xff08;2&#xff09;配置Mapper包扫描路径&#xff08;3&#xff09;定义Mapper接口并继承BaseM…...

前端知识点---rest(javascript)

文章目录 前端知识点---rest(javascript)rest的用法基本语法特点使用场景与扩展运算符&#xff08;spread&#xff09;区别小练习 前端知识点—rest(javascript) rest出现于ES2015 function doSum(a,b, ...args) //示例中的args就是一个rest参数 //它会将后续的所有参数存储…...

13. 猜最大公约数最小公倍数小游戏

文章目录 概要整体架构流程技术名词解释技术细节小结 1. 概要 ~ Jack Qiao对米粒说&#xff1a;“今天咱们玩个小游戏&#xff0c;这个游戏的玩家需要猜出&#xff0c;两个随机生成的整数的最大公约数&#xff08;GCD&#xff09;和最小公倍数&#xff08;LCM&#xff09;。如…...

Git 多仓库提交用户信息动态设置

Git 多仓库提交用户信息动态设置 原文地址&#xff1a;dddhl.cn 前言 在日常开发中&#xff0c;我们可能需要同时管理多个远程仓库&#xff08;如 GitHub、Gitee、GitLab&#xff09;&#xff0c;而每个仓库使用不同的邮箱和用户名。比如&#xff0c;GitHub 和 Gitee 使用相…...

2024.6使用 UMLS 集成的基于 CNN 的文本索引增强医学图像检索

Enhancing Medical Image Retrieval with UMLS-Integrated CNN-Based Text Indexing 问题 医疗图像检索中&#xff0c;图像与相关文本的一致性问题&#xff0c;如患者有病症但影像可能无明显异常&#xff0c;影响图像检索系统准确性。传统的基于文本的医学图像检索&#xff0…...

了解Redis(第一篇)

目录 Redis基础 什么事Redis Redis为什么这么快 除了 Redis&#xff0c;你还知道其他分布式缓存方案吗? 说-下 Redis 和 Memcached 的区别和共同点 为什么要用Redis? 什么是 Redis Module?有什么用? Redis基础 什么事Redis Redis &#xff08;REmote DIctionary S…...

UE5 第一人称射击项目学习(二)

在上一章节中。 得到了一个根据视角的位置创建actor的项目。 现在要更近一步&#xff0c;对发射的子弹进行旋转。 不过&#xff0c;现在的子弹是圆球形态的&#xff0c;所以无法分清到底怎么旋转&#xff0c;所以需要把子弹变成不规则图形。 现在点开蓝图。 这里修改一下&…...

npm/cnpm的使用

npm 1、安装npm 前往nodejs官网下载安装node 验证是否安装成功node node -v node安装npm也会安装 npm -v 2、使用npm 1. 初始化项目 在一个项目文件夹中运行&#xff1a; npm init 根据提示输入项目信息&#xff08;如项目名称、版本号等&#xff09;。 如果你希望快速初…...