频道直达 - 专题 - 新闻 - 技巧 - 组网 - 开发 - 安全 - web编程 - 图像 - 操作系统 - 数据库 - 教育 - 旅游 - 健康 - 时尚 - 驱动 - 软件 - 游戏 - 多媒体 - ERP - 讨论组

c#里的运算符重载

来源:pcdog 作者:佚名 出处:巧巧读书 2008-01-09 进入讨论组

  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 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}

  }

  );

  Order o3 = o1 + o2;

  operator 关键字用于在类或结构声明中声明运算符。运算符声明可以采用下列四种形式之一:

  public static result-type operator unary-operator ( op-type operand )

  public static result-type operator binary-operator (

  op-type operand,

  op-type2 operand2

  )

  public static implicit operator conv-type-out ( conv-type-in operand )

  public static explicit operator conv-type-out ( conv-type-in operand )

  参数

  result-type

  运算符的结果类型。

  unary-operator

  下列运算符之一:+ - ! ~ ++ — true false

  op-type

  第一个(或唯一一个)参数的类型。

  operand

  第一个(或唯一一个)参数的名称。

  binary-operator

  其中一个:+ - * / % & | ^ << >> == != > < >= <=

  op-type2

  第二个参数的类型。

  operand2

  第二个参数的名称。

  conv-type-out

  类型转换运算符的目标类型。

  conv-type-in

  类型转换运算符的输入类型。

  备注

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

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

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

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

巧 巧 读 书:http://www.qqread.com/csharp/v391926.html进入讨论组讨论。
收藏此文】【 】【打印】【关闭
相关图文阅读
频道图文推荐
健 康 咨 询
时 尚 咨 询
巧巧读书宗旨
相关专题
讨论组问题推荐
站内各频道最新更新文档
站内最新制作专题
热门关键字导读
Photoshop教 程照片处理 照片制作 PS快捷键 抠图
计 算 机 故 障XP系统修复
艺 术 与 设 计设计 流媒体 设计欣赏 边框
计 算 机 安 全ARP
站内频道文章精选
巧巧电脑频道编辑信箱  告诉我们您想看的专题或文章