почему C # и C ++ используют _ <variableName>соглашение о кодировании? - PullRequest
9 голосов
/ 29 сентября 2010

Я видел слишком много кода на C # и C ++, где соглашение о присвоении имен переменных, похоже, просит программистов писать имена переменных, используя подчеркивание перед текстом переменной.например,

int? _countMoney;

Каково обоснование этого соглашения?

Ответы [ 10 ]

25 голосов
/ 29 сентября 2010

В C # я обычно префикс с _ закрытыми полями, но не локальными переменными. Это объясняется тем, что когда мне нужна личная переменная, я набираю _, а Intellisense фильтрует список, и его легче найти. Таким образом, я также могу различать частные и локальные переменные, и мне больше не нужно вводить this.variablename для полей класса, а просто _variablename.

5 голосов
/ 29 сентября 2010

В Руководстве Microsoft по именованию элементов указано, что вы не используете префиксы для полей.

Не используйте префикс для имен полей. Например, не используйте g_ или s_ для различения статических и нестатических полей.

Вы можете прочитать рекомендации Microsoft для имен здесь . Это относится только к C #, конечно.

5 голосов
/ 29 сентября 2010

Вы не должны использовать _ как префикс в c ++. Имена, начинающиеся с _, зарезервированы для компилятора.

Наиболее распространенным префиксом является c ++ и m_ (как в 'member)

Для C # очень часто используется _.

На моем сайте, где мы делаем равное количество c ++ и c #, мы всегда используем m_, чтобы быть последовательными

5 голосов
/ 29 сентября 2010

Это простой способ идентифицировать закрытые переменные-члены.

4 голосов
/ 29 сентября 2010

Как и все другие соглашения, речь идет о том, чтобы сделать код проще для понимания.

Я видел это как соглашение для частных полей - в этом случае очень легко увидеть, что личное поле используется.

Вы можете задать тот же вопрос о венгерской нотации .

1 голос
/ 29 сентября 2010

Я не совсем уверен, что обоснование этого соглашения.Лично меня не волнует использование какого-либо префикса имени переменной для обозначения области видимости переменной, и я не особо беспокоюсь об использовании подчеркиваний в именовании чего-либо.Что такого плохого в использовании ключевого слова "this" и принятии соглашения о нижних верблюжьих именах для личных переменных экземпляра / члена?

public void IncrementFoo()
{
    this.foo += 1;
}

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

1 голос
/ 29 сентября 2010

Как уже говорили, соглашение об именах помогает отличать переменные-члены от локальных.Это дает два основных преимущества:

  • Помогает выбрать места, где изменяется состояние объекта (важно, например, для безопасности потока)
  • Предотвращает конфликты имен.Я могу написать конструктор вроде:

    SomeObject(int foo, int bar)
    {
      _foo = foo;
      _bar = bar;
    }
    

    Таким образом, мне не нужно называть аргументы new_foo или что-то в этом роде.

0 голосов
/ 29 сентября 2010

Префикс _ очень важен в VB.NET, потому что он не учитывает регистр.Мы кодируем как на C #, так и на VB.NET, и ради здравого смысла каждого важно иметь одинаковые соглашения об именах на обоих языках.

0 голосов
/ 29 сентября 2010

Что-то, что я заметил разработчиками Java в Eclipse, когда мне приходилось выполнять Java-работу, они не подчеркнули там свои переменные. Причина бытия? Члены VAR были помечены цветом в IDE ... не было необходимости так говорить. По привычке это произошло естественным образом, так как я обнаружил, что легко найти элемент var в VS IDE с помощью некоторой визуальной подсказки ... и подчеркнуть, что он довольно популярен. В редких случаях вам приходится смотреть на код в его самой сырой форме ... текст ... такие вещи очень помогают.

0 голосов
/ 29 сентября 2010

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

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