这是该计划。
using System;
public class Program {
public static int Main(string[] args) {
Stock obj = new Stock();
obj.Number = 30;
obj.Number -= 3;
Console.WriteLine(obj.Number);
return 0;
}
}
使用以下代码执行程序后
public class Stock {
int number;
public int Number {
get { return ++number; }
set { number = value; }
}
}
屏幕显示29.我希望它是28。
并使用以下代码
public class Stock {
int number;
public int Number {
get { return number * 3; }
set { number = value; }
}
}
给出261而不是81。
为什么?
答案 0 :(得分:10)
它比你预期的要多一次,因为这一行:
obj.Number -= 3;
相当于obj.Number = obj.Number - 3;
这基本上是召唤你的吸气者和设定者。
答案 1 :(得分:2)
在减去3
之前,由于前缀Number
,++
会增加1。
<强>更新强>
使用前缀++
时:
number
增加1 number
返回来电者使用postfix ++
时:
number
返回来电者number
增加1 让我们添加支持字段编号并将其公开仅用于说明目的:
public class Stock
{
public int number; //public - only for illustration
public int Number
{
get { return number; }
set { number = value; }
}
}
使用前缀(return ++number
):
var stock = new Stock();
stock.number = 10; //Set backing field directly
Console.WriteLine($"Number backing field now is: {stock.number}"); // 10
Console.WriteLine($"Get Number with prefix: {stock.Number}"); // 11
Console.WriteLine($"Number backing field now is: {stock.number}"); // 11
使用后缀(return number++
):
var stock = new Stock();
stock.number = 10; //Set backing field directly
Console.WriteLine($"Number backing field now is: {stock.number}"); // 10
Console.WriteLine($"Get Number with postfix: {stock.Number}"); // 10
Console.WriteLine($"Number backing field now is: {stock.number}"); // 11
如您所见,使用postfix,Number
属性返回非递增的number
后备字段,而前缀 - number
在返回调用者之前更新。