++i
is i+1  before read i;
i++ 
is read i before i+1;

解决方案 »

  1.   

    public static string operator++(string x)
    {
        return x+x;
    }没测试,也许不对,关键是operator++,可以查查msdn
      

  2.   

    c#里面是不允许自定义的操作符区分++i 和i++的,
    我以前做过一个测试,结果是一样的。
      

  3.   

    谢谢,turnmissile,您明白了我的意思,并给出了您以前的经验.
    鉴于我说的不太明白,以至于其他人误解了我的意思比如 在 c++ 中重载前缀 ++ 可以使用
    int 关键字作为参数 比如:
    #include <stdio.h>
    #include <iostream.h>
    class test
    {
    public:
    int a;
    public:
    test operator ++(){
    a++;
    return *this;
    }
    test operator ++(int){ //重载前缀
    test test1=*this;
    a++;
    return test1;
    }
    };int main(int argc, char *argv[])
    {
    test test2;
    test2.a = 200;
    cout << (test2++).a << endl;
    test2.a = 200;
    cout << (++test2).a << endl;
    return 0;
    }那么c# 那?
      

  4.   

    你们的星星好耀眼,请你们也照耀我一下.
    mvp 们,请帮一下忙好吗.
      

  5.   

    呀,查了一下msdn,发现自己说错了,与其它说不能区分,不如说你只要提供一个实现,编译器会自动帮你区别前缀++和后缀++ 请参考这个例子:public class integer
    {
    public int i;
    public integer(int p_i)
    {
    this.i = p_i;
    }
    public static integer operator ++(integer i)
    {
    integer t_i = new integer(i.i);
    t_i.i++;
    return t_i; }
    public override string ToString()
    {
    return this.i.ToString();
    }
    } class Class1
    {
    [STAThread]
    static void Main(string[] args)
    {
    integer i = new integer(1);
    Console.WriteLine(i);  //输出1;
    Console.WriteLine(i++); //输出1
    Console.WriteLine(i);  //输出2
    Console.WriteLine(++i); //输出3
    Console.WriteLine(i);  //输出3
    }
    }请顺便参考《C# language specification》 10.9.1节ms-help://MS.MSDNQTR.2003JUL.1033/csspec/html/vclrfcsharpspec_10_9_1.htm
      

  6.   

    我的这个问题的顺利解决得益于大家的热心帮忙,我在 特意向 cpptrier 表示我最诚挚的谢意,是他完整的解决了我的问题.其次,我要向turnmissle表达我的谢意,是他第一个明白了我的意图,并给出了您以前的经验.也谢谢其他参与的人.
      

  7.   

    问题的关键是在写++的时候,必须生成一个新的对象。这和编译器生成前缀++和后缀++的IL代码有关,如果不new一个新的对象,并返回,两种情况就一样了。
      

  8.   

    to cppTrier(JustinShen):
    嗬嗬,你的方法确实管用,我也知道为什么我以前的方法不能区分了。多谢了,我又长了一点经验值。你用的是:
    integer t_i = new integer(i.i);
    t_i.i++;
    return t_i;
    我的是:
    i.i++;
    return i;难怪不行。