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/
    本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。

  • 相关阅读:
    Ocelot简易教程(二)之快速开始1
    Ocelot简易教程(一)之Ocelot是什么
    InfluxDB学习之InfluxDB的基本操作
    InfluxDB入门教程
    .NET Core微服务之基于App.Metrics+InfluxDB+Grafana实现统一性能监控
    .net Core 微服务
    IdentityServer4 接口说明
    WINDOWS命令行关闭本地占用的端口
    并发负载压力测试
    C#操作Mongodb
  • 原文地址:https://www.cnblogs.com/PEPE/p/2570115.html
Copyright © 2011-2022 走看看