-2

为什么给定的输出是 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; }
     } 
}
4

2 回答 2

9

x.b直接设置 - 你没有使用calculate设置器,所以它没有乘以 100。

如果您更改了这一行:

x.b = 200;

对此:

x.calculate = 200;

那么它会如你所愿。

不过有几点需要说明:

  • 如果你正确缩进你的代码,它会更容易阅读
  • 如果你的b字段是私有的,你就不能直接设置它。字段应该几乎总是私有的。
  • 您应该遵循正常的 .NET 命名约定(例如,属性和类型的 PascalCase)
  • 你的属性很奇怪。像这样的代码是非常不寻常的:

    x.calculate = x.calculate;
    

    真正有所作为。如果我是你,我会重新考虑你的设计。

  • 如果您正在调用Console.WriteLine,则已经有一个重载来处理一个int值,即使没有该值也可以被装箱object。因此,您的代码将更简单地编写为:

    Console.WriteLine(x.calculate);
    
于 2013-05-12T16:15:05.570 回答
0

在这个“xb=200;” 你只调用“b”变量。而不是“计算”方法。所以每次你得到 200 作为输出而不执行计算方法。

为了更好地理解

在以下两条指令处取两个断点

得到 { 返回 b; }

设置 { b = 值 * 100; }

然后对“xb=200”和“x.claculate=200”这两个指令执行stepinto debug(按F11)。然后观察“xb=200”和“x.claculate=200”之间的区别

在 xb=200

“set{b=value*100;}”方法无法执行。这意味着 b=value*100 没有执行。所以每次你得到“200”作为输出。

在 x.calculate=200

“set{b=value*100;}”方法被执行。这意味着b被赋值为value*100。所以你得到“20000”作为输出。

最后你必须调用方法(“计算”)而不是变量(“b”)。

希望你能得到答案。祝你编程愉快......

于 2013-05-13T04:46:45.300 回答