请帮我这个C#代码

时间:2013-05-12 16:14:06

标签: c#-4.0

为什么给定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; }
     } 
}

2 个答案:

答案 0 :(得分: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); 。因此,您的代码将更简单地编写为:

    {{1}}

答案 1 :(得分:0)

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

为了更好地理解

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

得到{返回b; }

设置{b =值* 100; }

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

在x.b = 200

“设置{b =值* 100;}”方法无法执行。这意味着b =值* 100未执行。所以每次输出“200”时都会。

在x.calculate = 200

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

最后你必须调用method(“calculate”)而不是变量(“b”)。

希望你能得到答案。有一个快乐的编程........