比如一个类
    class Class1
    {
        public int x = 0;
        public int y = 0;
        public Class1()
        {
        }
    }
两个改类的实例 c1,c2
要求实现+运算符号(比如string中的 str1+=str2);
要求实现 c1+=c2;
结果是 c1的x,y值是c1,c2的值的和.

解决方案 »

  1.   

    以下是一个有理数的极其简化的类。该类重载 + 和 * 运算符以执行小数加法和乘法,同时提供将小数转换为双精度的运算符。 using System; 
    class Fraction 

    int num, den; 
    public Fraction(int num, int den) 

    this.num = num; 
    this.den = den; 
    } // overload operator + 
    public static Fraction operator +(Fraction a, Fraction b) 

    return new Fraction(a.num * b.den + b.num * a.den, 
    a.den * b.den); 
    } // overload operator * 
    public static Fraction operator *(Fraction a, Fraction b) 

    return new Fraction(a.num * b.num, a.den * b.den); 
    } // define operator double 
    public static implicit operator double(Fraction f) 

    return (double)f.num / f.den; 

    } 补充 参数 
    result-type 运算符的结果类型。 
    unary-operator 下列运算符之一:+ - ! ~ ++ — true false 
    op-type 第一个(或唯一一个)参数的类型。 
    operand 第一个(或唯一一个)参数的名称。 
    binary-operator 其中一个:+ - * / % & | ^ << >> == != > < >= <= 
    op-type2 第二个参数的类型。 
    operand2 第二个参数的名称。 
    conv-type-out 类型转换运算符的目标类型。 
    conv-type-in 类型转换运算符的输入类型。 =号不可以重载
      

  2.   

    class Class1
        {
            public int x = 0;
            public int y = 0;
            public Class1()
            {
            }
             public static Class1 operator + (Class1 c1,Class1 c2)
             {
                Class1 re = new Class1();
                re.x = c1.x+c2.x;
                re.y = c1.y +c2.y;
                return re;
              }
        }
      

  3.   

    谢谢各位, 
    本来想重载+= 和 -=呢, 后来才知道不可以!, 
    using System;
    using System.Collections.Generic;
    using System.Text;namespace test1
    {
        class Class1
        {
            public int x = 0;
            public int y = 0;
            public Class1()
            {
            }
            public Class1(int x1,int y1)
            {
                x = x1;
                y = y1;
            }
            public static Class1 operator +( Class1 c1, Class1 c2)
            {
                int x1 = c1.x + c2.x;
                int y1 = c1.y + c2.y;
                Class1 c3 = new Class1();
                c3.x = x1;
                c3.y = y1;
                return c3;
            }
            public static Class1 operator ++(Class1 c1)
            {
                int x1 = c1.x + c1.x;
                int y1 = c1.y + c1.y;
                Class1 c3 = new Class1();
                c3.x = x1;
                c3.y = y1;
                return c3;
            }
        }
    }