为什么给定200的输出而不是我预期的20000
请帮帮我!!!
class Program
{
static void Main(string[] args)
{
mukul x = new mukul();
x.b= 200;
Console.WriteLine(Convert.ToString(x.calculate));
Console.ReadLine()
}
}
class mukul
{
public int b;
public int calculate
{
get { return b; }
set { b = value * 100; }
}
}
答案 0 :(得分:9)
您直接设置了x.b
- 您没有使用calculate
设置器,因此它不会乘以100。
如果你改变了这一行:
x.b = 200;
到此:
x.calculate = 200;
然后它会像你期望的那样行事。
但要提出几点要点:
b
字段是私有的,则无法直接设置。字段应该始终是私有的。你的财产很奇怪。这样的代码非常不寻常:
x.calculate = x.calculate;
实际上有所作为。如果我是你,我会重新考虑你的设计。
如果您正在呼叫Console.WriteLine
,那么处理int
值已经过载,即使没有值,也可以将object
设置为Console.WriteLine(x.calculate);
。因此,您的代码将更简单地编写为:
{{1}}
答案 1 :(得分:0)
在这个“x.b = 200;”你只调用“b”变量。不是“计算”方法。所以每次你得到200作为输出而不执行计算方法。
为了更好地理解
在以下两条指令中取两个断点
得到{返回b; }
设置{b =值* 100; }
然后对“xb = 200”和“x.claculate = 200”等两个指令执行stepinto debug(按F11)。然后观察“xb = 200”和“x.claculate = 200”之间的差异
“设置{b =值* 100;}”方法无法执行。这意味着b =值* 100未执行。所以每次输出“200”时都会。
“set {b = value * 100;}”方法被执行。这意味着b被赋值为* 100.所以你得到“20000”作为输出。
最后你必须调用method(“calculate”)而不是变量(“b”)。
希望你能得到答案。有一个快乐的编程........