zoukankan      html  css  js  c++  java
  • C#运算符重载(操作符重载)

    1.什么是操作符重载

    定义:(百科定义)就是把已经定义的、有一定功能的操作符进行重新定义,来完成更为细致具体的运算等功能。操作符重载可以将概括性的抽象操作符具体化,便于外部调用而无需知晓内部具体运算过程。

    2.为什么需要运算符重载?

    在C#中 ,内置的数据类型有:int、double等这些类型是可以直接进行数值加减运算。例如:int i, j = 1; int sum=i+j;可以直接得到想要的和sum。

    如果要比较一个类(结构)进行对象比较加、减等操作 该如何实现?例如一个类Test,有对象a,b  如何实现对象相加a+b?

    3.运算符重载出场

    公式:public  static  “返回类型” operator “操作符符号” {…………}

    eg: public static Test operator +(Test lhs, Test rhs){ return new Test(lhs.value + rhs.value);  }

     

    4.案例

            struct Test
            {
                private int value;
                public int Value
                {
                    get { return value; }
                }
                public Test(int iValue)
                {
                    this.value = iValue;
                }
                //C#操作符重载
                //1、声明一个二元操作符,将两个Test加到一起   
                public static Test operator +(Test lhs, Test rhs)
                {
                    return new Test(lhs.value + rhs.value);
                }
                //2、声明一个二元操作符,将Test和int加到一起   
                public static Test operator +(Test lhs, int rhs)
                {
                    return lhs + new Test(rhs);
                }
                //3、声明一个二元操作符,将int和Test加到一起   
                public static Test operator +(int lhs, Test rhs)
                {
                    return new Test(lhs) + rhs;
                }
                //4、声明一个一元操作符,   
                public static Test operator ++(Test h)
                {
                    h.value++;
                    return h;
                }
            }

    定义一个结构struct,当然定义成类class一样

    结果:

     

    只有定义了才可做操作相关的操作,例如上面3:将int和Test加到一起只可以 int+Test对象 ,2.3+Test对象则报错

     

     

    5.注意

    C#中有6个比较运算符,它们分为 3对:
    ● == 和 !=
    ● > 和 <
    ● >= 和 <=
    C#要求成对重载比较运算符。如果重载了==,也必须重载!=,否则会产生编译错误

     

    6.可以重载的运算符(源自C#高级编程)

     

     

     

     

                                                                              

                                        ……温故知新,记笔记……


    作者:PEPE
    出处:http://pepe.cnblogs.com/
    本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。

  • 相关阅读:
    【ES6】数组的扩展——扩展运算符
    【ES6】函数的扩展
    菜鸡程序员是如何写代码的?
    我是技术总监,我出来求职,竟然找不到工作!
    为什么互联网公司天天都在招人?
    这个立冬,我线下面基了一位TMD高级专家,太牛逼了!
    太可怕了!有些码农为啥写代码,写到监狱里去了?
    56岁潘石屹生日当天宣布要学编程语言Python,网友:地产商来抢码农饭碗了!
    如何写出让同事无法维护的代码?
    hdu 1037 Keep on Truckin'
  • 原文地址:https://www.cnblogs.com/PEPE/p/2570115.html
Copyright © 2011-2022 走看看