• 运算符重载


    msdn解释:https://msdn.microsoft.com/zh-cn/library/vstudio/ms229032%28v=vs.100%29.aspx

    运算符重载

    允许为运算指定用户定义的运算符实现,其中一个或两个操作数是用户定义的类或结构类型。用户定义的运算符实现的优先级总是高于预定义运算符实现:仅当没有适用的用户定义运算符实现时才会考虑预定义运算符实现。

    运算符

    可重载性

    +、-、!、~、++、--、true、false

    可以重载这些一元运算符。
      true和false运算符必须成对重载。

    +、-、*、/、%、&、|、^、<<、>>

    可以重载这些二元运算符。

    ==、!=、<、>、<=、>=

    可以重载比较运算符。必须成对重载。

    &&、||

    不能重载条件逻辑运算符。
      但可以使用能够重载的&和|进行计算。

    []

    不能重载数组索引运算符,但可以定义索引器。

    ()

    不能重载转换运算符,但可以定义新的转换运算符。

    +=、-=、*=、/=、%=、&=、|=、^=、<<=、>>=

    不能显式重载赋值运算符。
      在重写单个运算符如+、-、%时,它们会被隐式重写。

    =、.、?:、->、new、is、sizeof、typeof

    不能重载这些运算符。

    我们知道。是不能直接对引用类型进行运算的。如果想运算。就要进行运算符重载。现在来写一个Student(学生类)实现对age的"加"和"比较大小"

    因为是测试。这里只简单的写一个字段 age

     1  class Student
     2     {
     3         /// <summary>
     4         /// 学生年龄
     5         /// </summary>
     6         public int age;
     7 
     8         /// <summary>
     9         /// + 运算符重载
    10         /// </summary>
    11         /// <param name="s1"></param>
    12         /// <param name="s2"></param>
    13         /// <returns></returns>
    14         public static int operator +(Student s1, Student s2)
    15         {
    16             return s1.age + s2.age;
    17         }
    18 
    19         /// <summary>
    20         /// > 比较运算符 。这里要求也要定义匹配的运算符 "<"  也就是下面的运算符重载
    21 
    22         /// </summary>
    23         /// <param name="s1"></param>
    24         /// <param name="s2"></param>
    25         /// <returns></returns>
    26         public static bool operator >(Student s1, Student s2)
    27         {
    28             return s1.age > s2.age;
    29         }
    30         public static bool operator <(Student s1, Student s2)
    31         {
    32             return s1.age < s2.age;
    33         }

    现在编写一个测试代码试试

     1  class Program
     2     {
     3         static void Main(string[] args)
     4         {
     8             //测试代码
     9             Student s1 = new Student() { age = 90 };
    10             Student s2 = new Student { age = 9 };
    11 
    12             Console.WriteLine(s1 + s2); //这样就实现了引用类型相加 实际是内部的age相加 就不需要s1.age+s2.age
    13             Console.WriteLine(s1 > s2); //引用类型比较大小
    14             Console.ReadLine();
    15 
    16         }
    17     }

    至此。就完成了运算符的重载。

  • 相关阅读:
    命令行中邮件的收发
    关于location对象
    正则表达式
    一家初创公司的 CTO 应当做什么?
    移动数据网络质量的国家奖牌榜
    MFQ&PPDCS测试分析和测试设计框架l学习记录
    Python学习笔记之基本语法学习1
    《用Python做HTTP接口测试》学习感悟
    我的中台的理解
    中台与平台的区别
  • 原文地址:https://www.cnblogs.com/nsky/p/4555547.html
Copyright © 2020-2023  润新知