Геттер хиты базы данных, локальная переменная нет? - PullRequest
0 голосов
/ 08 июня 2011

Лучше всего объяснить на примере:

int RecordCount
{
   return dataAdapter.getCount(); // database access
}

Теперь, каждый раз, когда это вызывается в коде, будет выполняться поиск в базе данных. Но что, если я назначу RecordCount локальной переменной следующим образом:

int recordCount = RecordCount;
// multiple calls to recordCount follow...

Я предполагал, что каждый раз при доступе к локальной переменной recordCount будет выполняться поиск в базе данных, поскольку recordCount является просто ссылкой на RecordCount. Тем не менее, мой коллега считает, что поиск будет происходить только при первоначальном назначении, и тогда recordCount можно будет свободно использовать без потери базы данных.

Как гласит старая реклама «Ночной футбол в понедельник», «Вы делаете звонок».

Ответы [ 3 ]

4 голосов
/ 08 июня 2011

Ваш коллега прав, вы не правы.

Это не имеет ничего общего с тем, что recordCount является ссылкой или нет.Доступ к field не имеет побочных эффектов.

Если бы recordCount было property, то в зависимости от реализации получателя вы могли бы выполнить поиск в базе данных, что и происходит в RecordCount.

0 голосов
/ 08 июня 2011

int (System.Int32) является типом значения - поэтому значение копируется при присвоении (в отличие от ссылочных типов).

Примечание. Не стоит выполнять дорогостоящие операции с получателями собственности.

0 голосов
/ 08 июня 2011

RecordCount возвращает int, которое установлено как значение для recordCount. Получатель вызывается только когда вы ссылаетесь на RecordCount напрямую.

Вы не присваиваете RecordCount как метод для recordCount, но значение, возвращаемое RecordCount.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...