Руководство по именованию полей C #? - PullRequest
39 голосов
/ 06 июля 2010

Я собираюсь поработать над небольшим количеством кода C # самостоятельно, но я хочу убедиться, что я следую наиболее широко принятым соглашениям об именах на случай, если я захочу привлечь других разработчиков, выпустить свой код или продать свойкод.Прямо сейчас я следую соглашению об именах, которое Microsoft установило, поскольку они кажутся наиболее широко принятыми.Единственная вещь, которую они не упоминают, это названия частных полей.По большей части я видел их имена в camelCase, как защищенные поля, однако это создает проблему, поскольку имена параметров должны быть в camelCase.Возьмем, к примеру, следующий конструктор:

public GameItem(string baseName, string prefixName, string suffixName)
{
    //initialize code
}

Теперь, если я использую camelCase для приватных полей, возникает конфликт имен, если я не использую «this» для доступа к полям класса (что я считаю противбольшинство стандартов не упоминать означает больше печатать).Одно из решений состоит в том, чтобы дать параметру другое имя, но это не имеет логического смысла давать одинаковые данные двум различным именам.Единственное другое решение, которое я знаю об этом, было распространено в кодировании C ++ - это дать частным членам подчеркивание в начале (_camelCase).Является ли это решение общепринятым с C # кодированием?Есть ли другое решение этой проблемы (например, только использование свойств (которые используют PascalCase) для доступа к полям, даже в самом классе)?

Ответы [ 15 ]

1 голос
/ 06 июля 2010

В соответствии с соглашениями Microsoft об именах к частным полям следует добавить префикс подчеркивания.

Например:

private int _myValue;

Удачи!

0 голосов
/ 07 июля 2018

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

Мне нравится, что закрытые поля свойств имеют начальное подчеркивание - особенно в C # из-за чувствительности к регистру (чья идея была что в любом случае?) И я добавляю префиксы для модулей / классов с «м», а также усилить их охват.

Если вам это не нравится, вам действительно это не понравится: я обычно использую префиксы типов (кроме полей свойств) - "o" для объекта, "s" для Строка, «i» для целого числа и т. Д.

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

Итак ...

Class MyClass

    Private msClassVariable  As String = ""

    Private _classProperty As Integer = 0
    Property Readonly ClassProperty() As Integer
        Get
            Return _classProperty
        End Get
    End Property

    Sub New()

        Dim bLocalVariable As Boolean = False
        if _classProperty < 0 Then _classProperty = 0
        msClassVariable  = _classProperty.ToString()
        bLocalVariable = _classProperty > 0
    End Sub

End Class
0 голосов
/ 23 июня 2011

Я делаю это; это в значительной степени соответствует MSDN.

class MyClass : MyBaseClass, IMyInterface
{
    public event EventHandler MyEvent;
    int m_MyField = 1;
    int MyProperty {
        get {
            return m_MyField;
        }
        set {
            m_MyField = value;
        }
    }

    void MyMethod(int myParameter) {
        int _MyLocalVaraible = myParameter;
        MyProperty = _MyLocalVaraible;
        MyEvent(this, EventArgs.Empty);
    }
}

Вот немного подробнее: http://jerrytech.blogspot.com/2009/09/simple-c-naming-convention.html

0 голосов
/ 07 июля 2010

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

0 голосов
/ 06 июля 2010
private string baseName; 
private string prefixName; 
private string suffixName; 

public GameItem(string _baseName, string _prefixName, string _suffixName) 
{ 
    this.baseName = _baseName; 
    this.prefixName = _prefixName; 
    this.suffixName = _suffixName; 
} 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...