现在的位置: 首页 > 综合 > 正文

C#运算符重载(操作符重载)

2012年02月29日 ⁄ 综合 ⁄ 共 1150字 ⁄ 字号 评论关闭

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#高级编程)

 

 

 

 

 

                                                                          

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

抱歉!评论已关闭.