4

可能重复:
后增量运算符重载
为什么后缀 ++/— 在 C# 中被归类为主要运算符?

我看到我可以重载++and--运算符。通常您通过两种方式使用这些运算符。前后递增/递减一个 int 示例:

int b = 2; 
//if i write this
Console.WriteLine(++b); //it outputs 3
//or if i write this
Console.WriteLine(b++); //outpusts 2

但是在运算符重载方面情况有点不同:

    class Fly
    {
        private string Status { get; set; }

        public Fly()
        {
            Status = "landed";
        }

        public override string ToString()
        {
            return "This fly is " + Status;
        }

        public static Fly operator ++(Fly fly)
        {
            fly.Status = "flying";
            return fly;
        }
    }


    static void Main(string[] args)
    {
        Fly foo = new Fly();

        Console.WriteLine(foo++); //outputs flying and should be landed
        //why do these 2 output the same?
        Console.WriteLine(++foo); //outputs flying
    }

我的问题是为什么最后这两行输出相同的东西?更具体地说,为什么第一行(两行)输出flying


解决方案是将运算符重载更改为:

        public static Fly operator ++(Fly fly)
        {
            Fly result = new Fly {Status = "flying"};
            return result;
        }
4

1 回答 1

4

前缀和后缀的区别在于++,offoo++的值是foo调用++运算符之前的值,而是运算符返回++foo的值。++在您的示例中,这两个值是相同的,因为++运算符返回原始fly引用。相反,如果它返回一个的“飞行” Fly,那么您会看到您期望的差异。

于 2012-11-13T17:33:36.693 回答