Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/csharp-4.0/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 4.0 请帮我查一下这个C代码_C# 4.0 - Fatal编程技术网

C# 4.0 请帮我查一下这个C代码

C# 4.0 请帮我查一下这个C代码,c#-4.0,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 {

为什么给定的产量是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; }
     } 
}

您直接设置了
x.b
——您没有使用
calculate
setter,因此它不会乘以100

如果您更改了此行:

x.b = 200;
为此:

x.calculate = 200;
然后它就会像你期望的那样

但有几点需要说明:

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

    x.calculate = x.calculate;
    
    去真正改变。如果我是你,我会重新考虑你的设计

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

    Console.WriteLine(x.calculate);
    
在这个“x.b=200”中,您只调用“b”变量,而不是“计算”方法。因此,每次您将200作为输出,而不执行计算方法

为了更好地理解

在下面的两条指令处设置两个断点

获取{return b;}

设置{b=value*100;}

然后对“x.b=200”和“x.claculate=200”这两条指令执行stepinto调试(按F11)。然后观察“x.b=200”和“x.claculate=200”之间的差异

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

在x中,计算=200 “set{b=value*100;}”方法被执行。这意味着b被赋值为*100。所以您得到“20000”作为输出

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


希望你得到答案。祝你有一个愉快的节目

设置x.b会为字段指定一个值。调用x.calculate调用属性上的“get”。“集合”永远不会被调用。使用x.calculate=200。