- 本文介绍C#运算符重载是个不常出现的应用,同时也是个好玩的东西,我们可以使用一下方法来实现这样的需求。
C#运算符重载是个不常出现的应用,同时也是个好玩的东西。
我们可以使用他来实现这样的需求:
当一个订单与另外一个订单相加形成一个新的订单。新订单的货物为两个订单的货物的并集,总价为两个订单的总价和。下面实现看看,先做个辅助的货物类
- public class Merchandise{
- public int Count { get; set; }
- public string Name { get; set; }
- public double UnitPrice { get; set; }
- }然后来实现订单类
- public class Order
- {
- public double TotalPrices { get; set; }
- public List < Merchandise > Merchadises { get; set; }
- public static Order operator +(Order a, Order b){
- Order new newOrder = new Order(){
- TotalPrices = a.TotalPrices + b.TotalPrices
- };
- newOrder.Merchadises.AddRange(a.Merchadises);
- newOrder.Merchadises.AddRange(b.Merchadises);
- return newOrder;
- }
- }
下面是客户端调用代码
- Order o1 = new Order { TotalPrices = 500 .0 };
- o1.Merchadises.AddRange
- new List < Merchandise > {
- new Merchandise{ Name = "肥皂" , Count = 100 , UnitPrice = 3 },
- new Merchandise{ Name = "毛巾" , Count = 100 , UnitPrice = 2 }
- }
- Order o2 = new Order { TotalPrices = 8000 .0 };
- o1.Merchadises.AddRange
- new List < Merchandise > {
- new Merchandise{ Name = "电视" , Count = 5 , UnitPrice = 1000 },
- new Merchandise{ Name = "DVD" , Count = 5 , UnitPrice = 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#运算符重载