• 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# 编程指南)列表。

  • 相关阅读:
    封装组件集合
    Vue组件封装(以封装一个button组件为例)
    Spark权威指南读书笔记(四) 聚合与连接
    leetcode刷题笔记一百三十五题 分发糖果
    leetcode刷题笔记一百三十四题 加油站
    leetcode刷题笔记一百三十三题 克隆图
    leetcode刷题笔记一百三十一与一百三十二题 分割回文串与分割回文串II
    leetcode刷题笔记一百三十题 被围绕的区域
    leetcode刷题笔记一百二十九题 求根到叶子节点数字之和
    leetcode刷题笔记一百二十八题 最长连续序列
  • 原文地址:https://www.cnblogs.com/tianyamoon/p/1029640.html
Copyright © 2020-2023  润新知