Getter命中数据库,本地变量未命中
本文关键字:变量 数据库 Getter | 更新日期: 2023-09-27 17:58:36
最好用一个例子来解释:
int RecordCount
{
return dataAdapter.getCount(); // database access
}
现在,每次在代码中调用它时,都会进行数据库查找。但是如果我把RecordCount
分配给一个局部变量,比如
int recordCount = RecordCount;
// multiple calls to recordCount follow...
我假设每次访问本地变量recordCount
时,都会进行数据库查找,因为recordCount
只是对RecordCount
的引用。然而,我的同事认为,查找只会在初始分配时发生,然后recordCount可以自由使用,而不会对数据库造成更多损失。
正如IBM过去的"周一夜足球"广告所说,"你来决定"。
你的同事是对的,你错了。
它与recordCount
是否作为参考无关。使用field
不会产生副作用。
如果recordCount
是property
,那么根据getter实现,您可以进行数据库查找,这正是RecordCount
中发生的情况。
RecordCount
返回一个int
,该值被设置为recordCount
的值。getter只有在直接引用RecordCount
时才会被调用。
您不是将RecordCount
作为方法分配给recordCount
,而是将RecordCount
返回的值。
int(System.Int32)是值类型,因此赋值时会复制值(与引用类型不同)。
注意:考虑不要在属性getter中执行代价高昂的操作。