2008-10-28 4 views
311
private const int THE_ANSWER = 42; 

илиСоглашение об именовании C# для констант?

private const int theAnswer = 42; 

Лично я думаю, что современные Иды мы должны идти с верблюжьего, как ALL_CAPS выглядит странно. Как вы думаете?

+4

@mmiika: что означает «the» в этом примере? Это как в «Путеводителе автостопом по галактике», или оно переносится с некоторого стандарта кодирования на С ++? (Например, старая C++-инфраструктура для Macintosh, THINK C [и более поздняя версия Symantec C++] использовала префикс «его» для элементов-указателей/ссылок и «для» для скалярных элементов.) – 2010-02-03 11:26:40

+3

@Peter, поскольку значение константы - 42 , Я очень верю, что это ссылка на «Путеводитель автостопом по Галактике» (http://en.wikipedia.org/wiki/Phrases_from_The_Hitchhiker%27s_Guide_to_the_Galaxy#Answer_to_the_Ultimate_Question_of_Life.2C_the_Universe.2C_and_Everything_.2842.29). – Albireo 2011-05-19 10:02:52

+0

@PeterMortensen Это креативно! Но такие имена, как itsEmployee и itsCostumer, звучат так, будто они могут вводить в заблуждение. – 2012-03-29 00:37:30

ответ

363

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

private const int TheAnswer = 42; 

Паскаля нотации также задокументированы в компании Microsoft Framework Design Guidelines

12

Оставить Венгрии венгерцам.

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

private const int Answer = 42; 

Является ли этот ответ или что ответ?

* Made edit as Pascal строго правильный, однако я думал, что вопрос больше подходит для ответа на вопрос life, the universe and everything.

5

ALL_CAPS взято из методов работы C и C++, которые я считаю. В этой статье here объясняется, как возникли различия стиля.

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

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

19

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

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

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

Edit:

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

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

62

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

private const int TheAnswer = 42; 

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

6

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

14

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

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

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

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

11

В своей статье Constants (C# Programming Guide), 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 Capitalization Conventions для двухбуквенного сокращения (хотя 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 не защищает конкретные соглашения об именах или капитализации для частных идентификаторов, как показано в примерах, представленных в вопросе.

39

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

const int THE_ANSWER = 42; 

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

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; 
} 
Смежные вопросы