Соглашение об именовании констант в C #? - PullRequest
367 голосов
/ 28 октября 2008
private const int THE_ANSWER = 42;

или

private const int theAnswer = 42;

Лично я думаю, что с современными IDE мы должны использовать CamelCase, поскольку ALL_CAPS выглядит странно Что ты думаешь?

Ответы [ 9 ]

429 голосов
/ 28 октября 2008

Рекомендуемое соглашение об именовании и использовании заглавных букв заключается в использовании для констант регистров Pascal (у Microsoft есть инструмент с именем StyleCop , который документирует все предпочтительные соглашения и может проверять ваш источник на соответствие - хотя это немного тоже анально сохраняющий вкус многих людей). например,

private const int TheAnswer = 42;

Соглашение об использовании заглавных букв в Паскале также задокументировано в Microsoft Design Guidelines .

.
65 голосов
/ 28 октября 2008

На самом деле, это

private const int TheAnswer = 42;

По крайней мере, если вы посмотрите на библиотеку .NET, какой IMO - лучший способ решить соглашения об именах - чтобы ваш код не выглядел неуместно.

49 голосов
/ 21 мая 2014

Визуально, верхний регистр это путь. Это так узнаваемо. Ради уникальности и не оставляя шансов угадать, я голосую за UPPER_CASE!

const int THE_ANSWER = 42;

Примечание : верхний регистр будет полезен, когда константы должны использоваться в одном и том же файле вверху страницы и для целей интеллектуального анализа; однако, если бы они были перемещены в независимый класс, использование верхнего регистра не имело бы большого значения, например:

public static class Constant
{
    public static readonly int Cons1 = 1;
    public static readonly int coNs2 = 2;
    public static readonly int cOns3 = 3;
    public static readonly int CONS4 = 4;
}

// Call constants from anywhere
// Since the class has a unique and recognizable name, Upper Case might might lose its charm
private void DoSomething(){
var getCons1 = Constant.Cons1;
var getCons2 = Constant.coNs2;
var getCons3 = Constant.cOns3;
var getCons4 = Constant.CONS4;
 }
22 голосов
/ 28 октября 2008

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

Конечно, легко сразу увидеть, что что-то является константой. Вопрос для меня: действительно ли нам нужна эта информация? Помогает ли это нам как-то избежать ошибок? Если я назначу значение const, компилятор скажет мне, что я сделал что-то глупое.

Мой вывод: иди с верблюжьей шкурой. Может быть, я тоже поменяю свой стиль; -)

Edit:

Это что-то пахнет Венгерский не совсем верный аргумент, ИМО. Вопрос всегда должен быть: это помогает или больно?

Бывают случаи, когда венгерский помогает. Не так много в наше время, но они все еще существуют.

15 голосов
/ 28 октября 2008

Во-первых, венгерская нотация - это практика использования префикса для отображения типа данных параметра или предполагаемого использования. Соглашения Microsoft о присвоении имен для отказа от венгерской нотации http://en.wikipedia.org/wiki/Hungarian_notation http://msdn.microsoft.com/en-us/library/ms229045.aspx

Использование UPPERCASE не рекомендуется, как указано здесь: Паскаль Кейс является приемлемым условием и кричащими крышками. http://en.wikibooks.org/wiki/C_Sharp_Programming/Naming

Microsoft также заявляет, что UPPERCASE можно использовать, если это сделано для соответствия существующей схеме. http://msdn.microsoft.com/en-us/library/x2dbyw72.aspx

Это в значительной степени подводит итог.

12 голосов
/ 28 октября 2008

Оставь венгров венграм.

В этом примере я бы даже пропустил окончательную статью и просто использовал

private const int Answer = 42;

Это ответ или это ответ?

* Сделано редактировать как Паскаль строго правильно, однако я думал, что вопрос в том, чтобы искать больше ответа на жизнь, вселенную и все .

10 голосов
/ 02 января 2014

В своей статье Константы (Руководство по программированию в C #) Microsoft приводит следующий пример:

class Calendar3
{
    const int months = 12;
    const int weeks = 52;
    const int days = 365;

    const double daysPerWeek = (double) days / (double) weeks;
    const double daysPerMonth = (double) days / (double) months;
}

Итак, для констант представляется , что Microsoft рекомендует использовать camelCasing. Но обратите внимание, что эти константы определены локально .

Возможно, наименование внешне видимых констант представляет больший интерес. На практике Microsoft документирует свои открытые константы в библиотеке классов .NET как поля . Вот несколько примеров:

Первые два примера PascalCasing. Третий, по-видимому, следует соглашениям о капитализации от Microsoft для двухбуквенной аббревиатуры (хотя pi не является акрионимом). И четвертый, кажется, предполагает, что правило для двухбуквенного акрионима распространяется на однобуквенное сокращение или идентификатор, такой как E (который представляет математическую константу e ).

Кроме того, в своем документе «Соглашения о капитализации» Microsoft прямо заявляет, что идентификаторы полей должны быть названы через PascalCasing, и приводит следующие примеры для MessageQueue.InfiniteTimeout и UInt32.Min :

public class MessageQueue
{
    public static readonly TimeSpan InfiniteTimeout;
}

public struct UInt32
{
    public const Min = 0;
}

Вывод: используйте PascalCasing для открытых констант (которые задокументированы как const или static readonly поля).

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

6 голосов
/ 28 октября 2008

Я действительно предпочитаю PascalCase здесь - но по привычке я виновен в UPPER_CASE ...

6 голосов
/ 28 октября 2008

Я полагаю, что ALL_CAPS взята из методов работы C и C ++. Эта статья здесь объясняет, как возникли различия в стиле.

В новых IDE, таких как Visual Studio, легко определить типы, область действия и, если они постоянны, это не является строго обязательным.

Программное обеспечение FxCop и Microsoft StyleCop поможет вам получить рекомендации и проверить код, чтобы все работали одинаково.

...