zoukankan      html  css  js  c++  java
  • c#里的运算符重载

    c#里的运算符重载是个不常出现的应用,同时也是个好玩的东西。
    我们可以使用他来实现这样的需求:
    当一个订单与另外一个订单相加形成一个新的订单。新订单的货物为两个订单的货物的并集,总价为两个订单的总价和。

    下面实现看看
    先做个辅助的货物类
    public class Merchandise
    {
        
    public int Count getset; }
        
    public string Name getset; }
        
    public double UnitPrice getset; }
    }
    然后来实现订单类
    public class Order
    {
        
    public double TotalPrices getset; }
        
    public List<Merchandise> Merchadises getset; }

        
    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;


    贴上MSDN的说明

    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-typeop-type2 中至少有一个必须是封闭类型(即运算符所属的类型)。例如,这将防止重定义整数加法运算符。

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

    运算符只能采用值参数,不能采用 refout 参数。

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

  • 相关阅读:
    C++总结
    KMP算法
    理解I/O Completion Port(完成端口)
    [转载]Windows网络编程系列教程之四:Select模型
    [转载]理解 I/O Completion Port (IOCP完成端口)
    [转载]IOCP模型的总结
    发个IOCP的C++例子
    说说网络通信模型
    几个网络模型的示例代码(BlockingModel、OverlappedModel、WSAEventSelect、CompletionRoutine)..c++
    关于Socket 多线程 的一篇好文章
  • 原文地址:https://www.cnblogs.com/tianyamoon/p/1029640.html
Copyright © 2011-2022 走看看