мы должны объявлять локальную переменную всякий раз, когда мы получаем доступ к свойству? - PullRequest
3 голосов
/ 08 мая 2011

говорят, что у меня есть автоматическое свойство Открытое свойство P как целое число , и каждый раз, когда я хочу прочитать эту переменную P в функции, я буду объявлять локальную переменную так: dim _p = P затем прочитайте _p вместо P .

Мне интересно, имеет ли это смысл вообще?будет ли это на самом деле делать вещи медленнее (что, конечно, не является моим намерением)

Кстати, если мы изменим вопрос на Открытое свойство P как объект есть ли какие-либо изменения в ответе?

Ответы [ 7 ]

4 голосов
/ 08 мая 2011

Если вы обращаетесь к Me.P (или _p) в методе несколько сотен тысяч раз, копирование свойства в локальную переменную ускорит процесс. Однако в большинстве случаев это не проблема, поэтому вы можете делать все, что угодно, и это не будет иметь заметного значения.

Обычно я поддерживаю упрощение понимания кода, поэтому я предпочел бы получить доступ к свойству, если только вы не обнаружите, что вам нужна дополнительная производительность. Me.P легче понять, чем _p.

3 голосов
/ 08 мая 2011

Это зависит от того, что ваш геттер делает что-то кроме возврата значения, которое уже было вычислено.Если ваш геттер на самом деле просто действует как общедоступная переменная, тогда незначительное снижение производительности.С другой стороны, если ваш геттер выполняет какие-либо вычисления, он будет работать медленнее, так как каждый раз, когда вы вызываете свойство, он должен запускать код в нем.

3 голосов
/ 08 мая 2011

Что касается стиля кодирования, я бы предпочел, чтобы вы не присваивали P _p.При трассировке кода, чтобы увидеть, где используется P, я бы пропустил его версию _p.Я не думаю, что разница в скорости является чем-то значительным.

2 голосов
/ 08 мая 2011

Я делаю это только для устранения дублирования кода.Если свойство используется более одного раза, то я использую рефакторинг «Ввести переменную», чтобы заменить свойство локальным, содержащим то же значение.

В противном случае я не вижу причин для этого, и много причинне делать этого.

2 голосов
/ 08 мая 2011

Автоматически реализованные свойства имеют ту же производительность, что и классические свойства, так как компилятор генерирует то же самое, что и тот, который он генерирует для обычного класса, который не имеет автоматически реализуемых свойств.беспокоиться о производительности.Воспользуйтесь кратким форматом, если вам не нужно реализовывать больше логики внутри свойства.

2 голосов
/ 08 мая 2011

Это имеет смысл из-за природы свойств.Свойства позволяют пользователю вернуться назад и указать код для форматирования возвращаемого значения данного свойства.Вы не хотите запускать этот код каждый раз, когда ссылаетесь на него одним и тем же методом.

Вот код C #.Я уверен, что вы поймете, что он делает, даже если не знаком с C #:

public int MyNumber
{
    get
    {
        return GetValueFromDatabase();
    }
}

public void main()
{
    lblFirst.Text = MyNumber;
    lblSecond.Text = MyNumber;
    lblThird.Text = MyNumber;
}

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

public void main()
{
    int _myNumber = MyNumber;
    lblFirst.Text = _myNumber;
    lblSecond.Text = _myNumber;
    lblThird.Text = _myNumber;
}

Имейте в виду, что тот факт, что ваше имущество в настоящий момент не выполняет каких-либо необычных расчетов, не означает, что в будущем этого не произойдет.Вы не хотите кодировать так, что вам придется вернуться позже и изменить несколько разных мест только из-за изменения кода в одну строку.

2 голосов
/ 08 мая 2011

Все, что вы делаете, это запутывает ваш код.Просто используйте собственность напрямую.Там нет никаких последствий, кроме как сделать ваш код легче следовать.

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