以下属性只需要为getter和setter计算一次的值
所以代替:
public bool this[int x, int y]
{
get
{
return this[x * this.width + y];
}
set
{
this[x * this.width + y] = value;
}
}
Run Code Online (Sandbox Code Playgroud)
如果我们能做到这一点会更好:
public bool this[int x, int y]
{
int index = x * this.width + y;
get
{
return this[index];
}
set
{
this[index] = value;
}
}
Run Code Online (Sandbox Code Playgroud)
在这种情况下,它不是一个大问题,可以使用内联方法.但作为一项原则,有办法吗?
在get和set属性访问实际上编译为两个独立的方法.如果您需要通用代码,则必须采用与任何两种不同方法相同的方式 - 通过引入第三种方法,可能是静态方法.
private static CalculateIndex(int x, int width, int y)
{
return x * width + y;
}
public bool this[int x, int y]
{
get
{
return this[CalculateIndex(x, this.width, y)];
}
set
}
this[CalculateIndex(x, this.width, y)] = value;
}
}
Run Code Online (Sandbox Code Playgroud)
你不能简单地在这种情况下设置变量,这样它对于索引器的访问器来说是常见的,但是如果计算真的很苛刻,你可以使用某种缓存,在这种情况下你可以访问访问器中的缓存(只是就像index你的例子中的变量一样).这样做的问题在于缓存是非常重要的解决方案,您必须处理检查值是否被缓存,如果不缓存则计算它,并且在某些情况下还将其从缓存中移除(特别是为了避免内存泄漏).
| 归档时间: |
|
| 查看次数: |
1119 次 |
| 最近记录: |