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

20250529-C#知识:运算符重载

C#知识:运算符重载

运算符重载能够让我们像值类型数据那样使用运算符对类或结构体进行运算,并且能够自定义运算逻辑。


1、运算符重载及完整代码示例

  • 作用是让自定义的类或者结构体能够使用运算符
  • 运算符重载一定是public static的
  • 可以把运算符看成一个函数
  • 例如双目运算符’+'就是一个具有两个参数的函数
  • 运算符重载是根据运算符的参数的不同进行重载,类比函数重载
  • 条件运算符要成对重载
  • 不能使用ref和out关键字
  • 重载不改变运算符优先级
namespace LearnOperatorOverloading
{internal class Program{class Rect{public float height;public float width;public Rect() : this(2, 2) { }public Rect(float height, float width){this.height = height;this.width = width;}public float GetArea() => height * width;//条件运算符要成对重载public static bool operator <(Rect a, Rect b){if(a.height * a.width < b.height * b.width)return true;return false;}            public static bool operator >(Rect a, Rect b){if(a.height * a.width > b.height * b.width)return true;return false;}public static Rect operator + (Rect a, Rect b) => new Rect(a.height + b.height, a.width + b.width);public static Rect operator *(Rect a, Rect b) => new Rect(a.height * b.height, a.width * b.width);}static void Main(string[] args){Rect rect = new Rect();Console.WriteLine(rect.GetArea());  //4 Rect rect2 = new Rect(3, 5);Console.WriteLine(rect2.GetArea()); //15Console.WriteLine((rect2 + rect).GetArea());    //35Console.WriteLine((rect * rect2).GetArea());    //60//先乘后加,运算符重载后运算顺序不变Console.WriteLine((rect + rect * rect2).GetArea()); //96if (rect < rect2)   //Rect < Rect2Console.WriteLine("Rect < Rect2");elseConsole.WriteLine("Rect >= Rect2");}}
}

2、不可重载的运算符

  • 赋值运算符=
  • 点. 索引[] 强转()
  • 三目运算符 ?:
  • 逻辑或|| 和逻辑与&&

3、参考资料

  1. 《唐老狮C#》

本篇结束,感谢您的阅读~

在这里插入图片描述

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

相关文章:

  • 【HW系列】—目录扫描、口令爆破、远程RCE流量特征
  • 如何在WordPress网站中添加相册/画廊
  • 【NLP基础知识系列课程-Tokenizer的前世今生第一课】Tokenizer 是什么?为什么重要?
  • Codeforces Round 1025 (Div. 2)
  • Ubuntu20.04操作系统ssh开启oot账户登录
  • 类欧几里得算法(floor_sum)
  • 每日Prompt:卵石拼画
  • 湖北理元理律师事务所观察:债务优化如何成为民生安全网
  • AI时代新词-机器学习即服务(MLaaS)
  • 设计模式简述(二十)规格模式
  • 符合Python风格的对象(覆盖类属性)
  • 题目 3314: 蓝桥杯2025年第十六届省赛真题-魔法科考试
  • Java八股-Java优缺点,跨平台,jdk、jre、jvm关系,解释和编译
  • linux 内核态和用户态定时器函数使用总结
  • 支持selenium的chrome driver更新到136.0.7103.113
  • 硬件服务器基础
  • LVS的DR模式部署
  • TRS收益互换平台开发实践:从需求分析到系统实现
  • 测试Bug篇
  • 【Linux系统移植】Cortex-A8 Linux系统移植(超详细)
  • 第十五届蓝桥杯大赛软件赛国赛Python 大学 C 组试做【本期题单: 设置密码、栈】
  • 报错SvelteKitError: Not found: /.well-known/appspecific/com.chrome.devtools.json
  • word添加页眉
  • JavaScript 中的 BigInt:当普通数字不够“大“时的救星
  • 通过mailto:实现web/html邮件模板唤起新建邮件并填写内容
  • 2025推客系统小程序开发:独立部署源码交付,高性价比裂变增长引擎
  • 【Python零基础入门系列】第6篇:Python 的数据结构世界(列表、字典、集合、元组)
  • MVCC 原理与并发控制实现
  • CentOS 7.0重置root密码
  • YOLOV11改进策略【最新注意力机制】CVPR2025局部区域注意力机制LRSA-增强局部区域特征之间的交互