可能重复:
Post-increment Operator Overloading
Why are Postfix ++/— categorized as primary Operators in C#?
我看到我可以重载++
和--
运算符。
通常您通过2种方式使用这些运算符。前后增量/减少一个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;
}
答案 0 :(得分:4)
前缀和后缀++
之间的区别在于foo++
的值是调用foo
运算符之前++
的值,而++foo
是++
运算符返回的值。在您的示例中,这两个值是相同的,因为++
运算符返回原始fly
引用。如果它返回新“飞行”飞,那么你会看到你期望的差异。