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