Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/spring-mvc/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# 实例变量vs getter/setter_C# - Fatal编程技术网

C# 实例变量vs getter/setter

C# 实例变量vs getter/setter,c#,C#,您能否帮助描述在实例变量中存储一个计算字段(如矩形的面积)和每次调用该区域的getter时计算它之间的权衡 在我看来,有两种选择: 每次访问属性时,使用get方法计算值 将该值存储在专用支持字段中,并在每次需要更改时(即每次宽度或高度更改时)更新该值 因此,答案取决于哪个更频繁:访问计算值,还是更改计算值(即更改矩形的大小) 如果矩形的大小变化频率大于访问的区域,则仅在需要时计算值将更有效(以避免每次大小变化时大量“丢弃”计算): 如果访问区域的频率高于大小更改的频率,则存储计算值将更有效(避免

您能否帮助描述在实例变量中存储一个计算字段(如矩形的面积)和每次调用该区域的getter时计算它之间的权衡

在我看来,有两种选择:

  • 每次访问属性时,使用
    get
    方法计算值
  • 将该值存储在专用支持字段中,并在每次需要更改时(即每次宽度或高度更改时)更新该值
  • 因此,答案取决于哪个更频繁:访问计算值,还是更改计算值(即更改矩形的大小)

    如果矩形的大小变化频率大于访问的
    区域
    ,则仅在需要时计算值将更有效(以避免每次大小变化时大量“丢弃”计算):

    如果访问
    区域
    的频率高于大小更改的频率
    ,则存储计算值将更有效(避免大量冗余计算,因为大小没有更改,每次都会导致相同的值):


    然而,效率不是一切


    在这个特定的示例中,这两个选项之间的性能可以忽略不计,因此我只选择第一个选项,因为它的代码少得多,易于阅读,易于维护。

    除非计算复杂(矩形的面积肯定不复杂),否则可能可以忽略不计,或者您正在快速连续地获取它数千次。计算一次结果显然比一直动态计算要快。存储实例变量可能会导致重复数据。。。这是一个相当广泛的问题。您是否正在尝试针对特定的内容进行优化?速度记忆?请编辑您的问题,使其更具体。
    class Rectangle
    {
        public int Width { get; set; }
        public int Height { get; set; }
        public int Area => Width * Height;    // Calculate the value when accessed
    }
    
    class Rectangle
    {
        public int Width
        {
            get { return width; }
            set
            {
                if (width == value) return;
                width = value;
                Area = width * height;        // Store the new calculated value
            }
        }
    
        public int Height
        {
            get { return height; }
            set
            {
                if (height == value) return;
                height = value;
                Area = width * height;        // Store the new calculated value
            }
        }
    
        public int Area { get; private set; }
    
        private int width;
        private int height;
    }