[英]C# get property returns wrong integer
這是程序。
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。
為什么?
它比你預期的要多一次,因為這一行:
obj.Number -= 3;
相當於obj.Number = obj.Number - 3;
這基本上是你的getter和setter。
在減去3
之前,由於前綴++
, Number
增加1。
UPDATE
使用前綴++
:
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
使用postfix ( 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
會在返回給調用者之前更新。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.