Подтвердить что ты не робот

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

Я видел два общих подхода для стандартов кодирования для частных переменных-членов:

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

и

class Foo
{
    private int m_i;
    private string m_id; 
}

Я считаю, что последнее исходит из С++. Кроме того, многие люди задают тип перед переменной-членом (например, double m_dVal), чтобы указать, что это не константная переменная-член типа double?

Каковы соглашения в С#?

4b9b3361

Ответ 1

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

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

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

Ответ 2

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

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

Ответ 3

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

public String MyString { get; set; }

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

Ответ 4

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

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

Ответ 5

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

Ответ 6

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

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

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

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

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;
    }
}

Ответ 7

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

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

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

Ответ 8

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

Ответ 9

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

class Foo
{
  private int id;
  public Foo(int id)
  {
    id = id; //Will compile and work fine. But field will not be initialized.
  }
}

Ответ 10

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

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

Ответ 11

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

Ответ 12

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