должны ли мы объявлять локальную переменную всякий раз, когда мы обращаемся к свойству?

#.net #vb.net #function #variables

#.net #vb.net #функция #переменные

Вопрос:

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

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

Кстати, если мы изменим вопрос на общедоступное свойство P как Object, будут ли какие-либо изменения в ответе?

Ответ №1:

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

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

Комментарии:

1. copying the property to a local variable will speed things up может зависеть от способности JIT-движка оптимизировать

Ответ №2:

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

Ответ №3:

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

Ответ №4:

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

Ответ №5:

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

Вот код 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;
}
  

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

Ответ №6:

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

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

Ответ №7:

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

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