C#get属性返回错误的整数
这是节目单C#get属性返回错误的整数,c#,C#,这是节目单 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; } } 使用下面的代码执行程序
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; }
}
}
public class Stock {
int number;
public int Number {
get { return number * 3; }
set { number = value; }
}
}
屏幕显示29。我预计是28岁
使用下面的代码
public class Stock {
int number;
public int Number {
get { return ++number; }
set { number = value; }
}
}
public class Stock {
int number;
public int Number {
get { return number * 3; }
set { number = value; }
}
}
给出261而不是81
为什么?它比您预期的要多调用一次,因为这行:
obj.Number -= 3;
相当于obj.Number=obj.Number-3代码>
这基本上是调用你的getter和setter。在减去3
之前,Number
由于前缀++
而增加1
更新
使用前缀++
时:
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
数字
增加1
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
number
返回给调用方
数字
增加1
让我们添加支持字段编号,并将其公开,仅用于演示目的:
public class Stock
{
public int number; //public - only for illustration
public int Number
{
get { return number; }
set { number = value; }
}
}
带有前缀的(返回++编号
):
带后缀的(返回号码+++
):
如您所见,对于后缀,Number
属性返回非递增的Number
支持字段,而对于前缀-Number
则在返回调用方之前更新。public static int Main(string[/args)
?真正地谁得到这个int
值?学习调试。在程序的开头放一个断点,然后逐行执行。或者,如果您想更精确,请在getter中设置一个断点,并查看它何时被命中。你会立即得到它为什么要做它正在做的事情的答案。@ZoharPeled它被设置为环境变量。注意,带有副作用的属性getter(比如你的例子中的++number
)从来都不是一个好主意。啊,在重读时,也许你有,只是不是很清楚。我认为你的答案应该是清楚的,增量在程序中运行了两次。我仍然坚持我的意见,即你的答案没有添加任何现有答案中没有的内容(虽然我经常欣赏你在写你的答案时出现其他答案,但我相信这个答案不会花五分钟写出来。-)我可能会亲自删除它。或者,如果你改进了你的答案,我可能会投赞成票(我相信奖励人们投入的时间)。