C#运算符重载学习总结

开发 后端
本文介绍C#运算符重载是个不常出现的应用,同时也是个好玩的东西,我们可以使用一下方法来实现这样的需求。

C#运算符重载是个不常出现的应用,同时也是个好玩的东西。

我们可以使用他来实现这样的需求:

当一个订单与另外一个订单相加形成一个新的订单。新订单的货物为两个订单的货物的并集,总价为两个订单的总价和。下面实现看看,先做个辅助的货物类

  1. public class Merchandise{  
  2. public int Count { get; set; }  
  3. public string Name { get; set; }  
  4. public double UnitPrice { get; set; }  
  5. }然后来实现订单类  
  6. public class Order  
  7. {  
  8. public double TotalPrices { get; set; }  
  9. public List<Merchandise> Merchadises { get; set; }  
  10. public static Order operator +(Order a, Order b){  
  11. Order newnewOrder = new Order(){  
  12. TotalPrices = a.TotalPrices + b.TotalPrices  
  13. };  
  14. newOrder.Merchadises.AddRange(a.Merchadises);  
  15. newOrder.Merchadises.AddRange(b.Merchadises);  
  16. return newOrder;  
  17. }  

下面是客户端调用代码

  1. Order o1 = new Order { TotalPrices = 500.0 };  
  2. o1.Merchadises.AddRange  
  3. new List<Merchandise>{  
  4. new Merchandise{Name = "肥皂"Count=100UnitPrice=3},  
  5. new Merchandise{Name = "毛巾"Count=100UnitPrice=2}  
  6. }  
  7. Order o2 = new Order { TotalPrices = 8000.0 };  
  8. o1.Merchadises.AddRange  
  9. new List<Merchandise>{  
  10. new Merchandise{Name = "电视"Count=5UnitPrice=1000},  
  11. new Merchandise{Name = "DVD"Count=5UnitPrice=600}  

参数
result-type运算符的结果类型。
unary-operator下列运算符之一:+ - ! ~ ++ — true false
op-type***个(或***一个)参数的类型。
operand***个(或***一个)参数的名称。
binary-operator其中一个:+ - * / % & | ^ << >> == != > < >= <=
op-type2第二个参数的类型。
operand2第二个参数的名称。
conv-type-out类型转换运算符的目标类型。
conv-type-in类型转换运算符的输入类型。

备注

前两种形式声明了用户定义的内置C#运算符重载。注意,并非所有内置运算符都可以被重载(请参见可重载的运算符)。op-type 和 op-type2 中至少有一个必须是封闭类型(即运算符所属的类型)。例如,这将防止重定义整数加法运算符。

后两种形式声明了转换运算符。conv-type-in 和 conv-type-out 中正好有一个必须是封闭类型(即,转换运算符只能从它的封闭类型转换为其他某个类型,或从其他某个类型转换为它的封闭类型)。

运算符只能采用值参数,不能采用 ref 或 out 参数。

任何运算符声明的前面都可以有一个可选的属性(C# 编程指南)列表。以上介绍C#运算符重载

【编辑推荐】

  1. C#生产者和消费者
  2. 详细介绍C#基础知识
  3. C#正则表达式学习笔记
  4. 简单描述C#存储过程
  5. 浅析C#基于TCP协议
责任编辑:佚名 来源: 博客园
相关推荐

2009-08-12 10:47:03

C#运算符重载

2009-08-12 11:20:51

C#运算符重载

2009-09-04 13:18:10

C#允许运算符重载

2009-08-12 10:56:47

C#运算符重载C#运算符重载实例

2009-08-12 10:27:12

C#运算符重载运算符重载实例

2009-08-12 12:46:11

C#运算符重载

2009-08-12 10:37:13

C#运算符重载

2009-08-11 15:51:08

C#运算符算术运算符

2009-08-12 09:30:10

C#??运算符

2009-08-12 15:20:18

C#赋值运算符复合赋值运算符

2009-08-12 15:02:49

C#赋值运算符简单赋值运算符

2009-08-12 14:49:33

C#移位运算符

2009-09-01 10:08:57

C#运算符

2009-08-12 13:35:22

C#关系运算符

2009-08-12 14:29:32

C#条件运算符

2009-08-11 14:16:38

C# New运算符

2021-12-15 10:25:57

C++运算符重载

2011-07-15 01:34:36

C++重载运算符

2009-11-06 13:57:52

C#

2009-08-12 14:23:09

C#逻辑运算符
点赞
收藏

51CTO技术栈公众号