我在接受采访时遇到了这个问题,如果你有同样的问题,我想知道你会给出什么答案。 请 不要在IDE中测试程序。
public class MyClass
{
private int _myInt;
public int MyInt
{
get { return _myInt; }
set { _myInt = value; }
}
public MyClass()
{
MyInt = 1;
}
}
该程序应在屏幕上打印什么?更重要的是为什么!
var myClass = new MyClass();
myClass.MyInt += myClass.MyInt;
myClass.MyInt = myClass.MyInt +++ 2;
Console.WriteLine(myClass.MyInt);
答案 0 :(得分:2)
让我们看看一切
当您执行var myClass = new MyClass();
时,MyInt = 1,因为您已在构造函数中初始化它
执行此操作时myClass.MyInt += myClass.MyInt;
MyInt为1,因此您为自己添加了1,所以现在MyInt
为2
myClass.MyInt = myClass.MyInt +++ 2;
; MyInt是2,你加2,所以它变成4,后++暗示,赋值后增加(在这种情况下),所以它在MyInt
中分配4 因此答案应为4,
但是这是一个非常简单的案例,这个答案几乎表明post ++意味着evaluate current expression then increment
而pre ++意味着increment then evaluate current expression
,但事实并非如此(尽管如此,它出现在你的情况下) ,由语言设计师自己阅读更多关于here的信息
答案 1 :(得分:1)
如果你把第三行写成不同的东西,它会更清楚:
myClass.MyInt = myClass.MyInt++ + 2;
后增量返回2并随后递增。结果是2和2被添加到它。然后,通过加法(2 + 2)
的结果再次覆盖后增量的结果答案 2 :(得分:0)
并且会是4,因为++
(post increment operator)的precedence更高,+
更高+
precedence更高=
然后{{1} }}