Стандарты кодирования C # для закрытых переменных-членов [закрыто]

Я столкнулся с этой проблемой на python 3.4 со следующей ситуацией:

  • У сервера было только имя хоста ascii (например host1)
  • Файл / etc / хост-файл не содержит записи для моего имени хоста
  • Не было доступного DNS-разрешения (автономный компьютер)

После добавления следующей записи в файл /etc/hosts никакие дополнительные UnicodeDecodeError исключения не были брошены.

127.0.0.1 localhost host1
29
задан saluce 7 March 2013 в 15:50
поделиться

12 ответов

Помимо двух упомянутых вами, в C # очень распространено отсутствие префикса для закрытых членов.

class Foo
{
    private int i;
    private string id; 
}

Это то, что я использую, а также то, что рекомендуется в внутренних указаниях Microsoft по именованию .

61
ответ дан driis 7 March 2013 в 15:50
поделиться

Как отметил Брэд Абрамс: внутренние правила кодирования :

Не используйте префикс для переменных-членов (_, m_, s_ и т. Д.) .). Если вы хотите различать локальные переменные и переменные-члены, вы должны использовать «this.» в C # и «Me.» в VB.NET.

14
ответ дан Mehrdad Afshari 7 March 2013 в 15:50
поделиться

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

13
ответ дан Brandon Montgomery 7 March 2013 в 15:50
поделиться

Общее руководство от Microsoft здесь:

http://msdn.microsoft.com/en-us/library/ms229002.aspx

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

В общем: используйте верблюжий корпус и не ставьте свое имя перед префиксом типа подчеркивания или префикса типа.

public int Age {get; set;}

или

private int age;
public int Age
{
    get { return age; }
    set
    {
        if(value < 0)
            throw new InvalidOperationException("Age > 0");
        age = value;
    }
}
6
ответ дан andleer 7 March 2013 в 15:50
поделиться

Как я помню из чтения Framework Design Guidelines , на самом деле не существует установленного соглашения для частных переменных-членов, за исключением того, что не следует использовать венгерскую нотацию и не следует использовать заглавную букву первой буквы имени переменной ( использовать верблюжий корпус). В книге есть цитаты, которые поддерживают оба ваших примера, а также вообще не используют префиксы.

Лично я предпочитаю префикс "m_".

7
ответ дан AJ. 7 March 2013 в 15:50
поделиться

Я лично всегда использовал ваш первый пример:

    public class Foo
    {
        private int _i;
        private string _id;
    }

Фактически, это то, что использует вся моя команда. Кроме того, тот, который вы упомянули m_dVal, известен как венгерская нотация, здесь есть статья в Википедии . Венгерская нотация фактически противоречит стандартам кодирования наших команд, поэтому я никогда не использую ее.

5
ответ дан Alexander Kahoun 7 March 2013 в 15:50
поделиться

Я предпочитаю подчеркивание в качестве префикса для частных неконстантных неконтролируемых полей. Зачем? Причины: 1. Просто глядя на переменную, я могу различить поле & amp; локальная / переменная параметра. Используя «это». для всех полей это не вариант - его дольше. 2. Существует двусмысленность между параметром и полем:

class Foo
{
  private int id;
  public Foo(int id)
  {
    id = id; //Will compile and work fine. But field will not be initialized.
  }
}
3
ответ дан Aleksei 7 March 2013 в 15:50
поделиться

Я склонен придерживаться первого соглашения, простого подчеркивания. Я также не указываю тип в имени, потому что мне Intellisense говорит, что это такое (я знаю, это может быть опора).

Лучше всего посоветоваться с коллегами или коллегами по проекту и просто принять решение о соглашении, некоторые из них являются произвольными.

1
ответ дан Jon Dewees 7 March 2013 в 15:50
поделиться

Я предпочитаю вообще не использовать префикс для переменных-членов. Для тех, кто объявлен вне метода, я использую «this.memberVariableName», чтобы отличать их от тех, которые объявлены внутри метода.

1
ответ дан cyclo 7 March 2013 в 15:50
поделиться

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

public String MyString { get; set; }

Используйте фрагмент prop , чтобы сделать их ДЕЙСТВИТЕЛЬНО быстрыми.

10
ответ дан Daniel Schaffer 27 November 2019 в 22:58
поделиться

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

4
ответ дан ibz 27 November 2019 в 22:58
поделиться

В C ++ идентификаторы, начинающиеся с _, считаются плохой практикой, их следует оставить для внутреннего использования. Я думаю, именно поэтому префикс имени переменной с _ иногда считается плохой практикой и в C # ... хотя нет никаких причин, почему вы не можете сделать это, поскольку все внутренние компоненты .NET инкапсулированы должным образом, в отличие от C / C ++ стандартные библиотеки.

0
ответ дан jheriko 27 November 2019 в 22:58
поделиться
Другие вопросы по тегам:

Похожие вопросы: