运算符重载
2015-06-05 20:41 糯米粥 阅读(402) 评论(0) 编辑 收藏 举报msdn解释:https://msdn.microsoft.com/zh-cn/library/vstudio/ms229032%28v=vs.100%29.aspx
运算符重载
允许为运算指定用户定义的运算符实现,其中一个或两个操作数是用户定义的类或结构类型。用户定义的运算符实现的优先级总是高于预定义运算符实现:仅当没有适用的用户定义运算符实现时才会考虑预定义运算符实现。
运算符 |
可重载性 |
+、-、!、~、++、--、true、false |
可以重载这些一元运算符。 |
+、-、*、/、%、&、|、^、<<、>> |
可以重载这些二元运算符。 |
==、!=、<、>、<=、>= |
可以重载比较运算符。必须成对重载。 |
&&、|| |
不能重载条件逻辑运算符。 |
[] |
不能重载数组索引运算符,但可以定义索引器。 |
() |
不能重载转换运算符,但可以定义新的转换运算符。 |
+=、-=、*=、/=、%=、&=、|=、^=、<<=、>>= |
不能显式重载赋值运算符。 |
=、.、?:、->、new、is、sizeof、typeof |
不能重载这些运算符。 |
我们知道。是不能直接对引用类型进行运算的。如果想运算。就要进行运算符重载。现在来写一个Student(学生类)实现对age的"加"和"比较大小"
因为是测试。这里只简单的写一个字段 age
1 class Student 2 { 3 /// <summary> 4 /// 学生年龄 5 /// </summary> 6 public int age; 7 8 /// <summary> 9 /// + 运算符重载 10 /// </summary> 11 /// <param name="s1"></param> 12 /// <param name="s2"></param> 13 /// <returns></returns> 14 public static int operator +(Student s1, Student s2) 15 { 16 return s1.age + s2.age; 17 } 18 19 /// <summary> 20 /// > 比较运算符 。这里要求也要定义匹配的运算符 "<" 也就是下面的运算符重载 21 22 /// </summary> 23 /// <param name="s1"></param> 24 /// <param name="s2"></param> 25 /// <returns></returns> 26 public static bool operator >(Student s1, Student s2) 27 { 28 return s1.age > s2.age; 29 } 30 public static bool operator <(Student s1, Student s2) 31 { 32 return s1.age < s2.age; 33 }
现在编写一个测试代码试试
1 class Program 2 { 3 static void Main(string[] args) 4 { 8 //测试代码 9 Student s1 = new Student() { age = 90 }; 10 Student s2 = new Student { age = 9 }; 11 12 Console.WriteLine(s1 + s2); //这样就实现了引用类型相加 实际是内部的age相加 就不需要s1.age+s2.age 13 Console.WriteLine(s1 > s2); //引用类型比较大小 14 Console.ReadLine(); 15 16 } 17 }
至此。就完成了运算符的重载。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· DeepSeek如何颠覆传统软件测试?测试工程师会被淘汰吗?