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

Версия SQLite решения RedFilters top

select d.Date
from (
    select 
    date(julianday('2010-01-20') + (a.a + (10 * b.a) + (100 * c.a))) as Date
    from (select 0 as a union all select 1 union all select 2 union all select 3 union all select 4 union all select 5 union all select 6 union all select 7 union all select 8 union all select 9) as a
    cross join (select 0 as a union all select 1 union all select 2 union all select 3 union all select 4 union all select 5 union all select 6 union all select 7 union all select 8 union all select 9) as b
    cross join (select 0 as a union all select 1 union all select 2 union all select 3 union all select 4 union all select 5 union all select 6 union all select 7 union all select 8 union all select 9) as c
) d
where 
d.Date between '2010-01-20' and '2010-01-24' 
order by d.Date
371
задан AK47 12 October 2017 в 08:58
поделиться

9 ответов

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

private const int TheAnswer = 42;

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

433
ответ дан Lauren Van Sloun 12 October 2017 в 08:58
поделиться
  • 1
    Не работает всякий раз, когда я начинаю печатать, он редактирует только одно слово. Моя версия np = 7.3.1. Что я хочу сделать, так это комментировать / раскомментировать все операторы печати в целях отладки. – Billy Jhon 21 March 2017 в 18:14

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

private const int TheAnswer = 42;

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

65
ответ дан bh213 12 October 2017 в 08:58
поделиться
  • 1
    да. и это то, что мой вопрос. Как и операторы print, все в разных частях кода. поэтому я выделю все и отредактирую знаком #. Но, похоже, ваше решение не работает. и ссылка, которую вы разместили, ссылается на комментирование блока. и это не то, что я хочу. – Billy Jhon 21 March 2017 в 19:11

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

Использование UPPERCASE не рекомендуется, как указано здесь: Pascal Case - это приемлемое соглашение и SCREAMING CAPS. http://en.wikibooks.org/wiki/C_Sharp_Programming/Naming

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

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

15
ответ дан user31939 12 October 2017 в 08:58
поделиться

Визуально верхний регистр - это путь. Это так узнаваемо. Ради уникальности и не оставляя шансов угадать, я голосую за 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;
 }
49
ответ дан Fireboyd78 12 October 2017 в 08:58
поделиться
  • 1
    @BillyJhon Я только что протестировал многострочное редактирование в Notepad ++ v7.3.1 , и оно работает ... Вы включили эту функцию? Эта страница на самом деле обсуждает эту функцию. Если это не работает для вас, то у вас может быть другая проблема. – Joshua 21 March 2017 в 19:30

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

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

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

Редактировать:

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

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

22
ответ дан Treb 12 October 2017 в 08:58
поделиться

В своей статье Константы (Руководство по программированию в 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 не поддерживает конкретные соглашения об именах или использовании заглавных букв для частных идентификаторов , как показано в примерах, представленных в вопросе.

11
ответ дан DavidRR 12 October 2017 в 08:58
поделиться
  • 1
    В частности, я не вижу причин для перенаправления ввода, и я действительно не интересуюсь инструментами Unix против Windows. Мне было любопытно только один конкретный инструмент. В конце концов, перенаправление вывода > & quot; реализовано! – Andriy Drozdyuk 22 July 2011 в 16:59

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

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

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

6
ответ дан Peter Mortensen 12 October 2017 в 08:58
поделиться
  • 1
    Я обсуждал связь между объективами и расширяемыми записями с Расселом (О'Коннор) только сегодня утром - и это не ясно. Линзы отлично подходят для абстрагирования get / set одного поля в агрегате, но менее хороши для представления самого агрегата. В любом случае, мне кажется, что я должен придерживаться HList (на данный момент), а затем попытаться найти, какой из множества вариантов я должен выбрать для решения имеющейся проблемы (которая переводит некоторый код O'Caml, который использует полиморфный варианты и типы строк и функторы в Haskell). – Jacques Carette 22 August 2012 в 21:02

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

6
ответ дан Marc Gravell 12 October 2017 в 08:58
поделиться
  • 1
    Это определенно проблема Chrome, и это было в течение некоторого времени ... – BJury 17 February 2014 в 13:00

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

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

private const int Answer = 42;

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

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

12
ответ дан Peter Mortensen 12 October 2017 в 08:58
поделиться
  • 1
    TechNet работал нормально, когда я попробовал. – Peter Mortensen 16 October 2017 в 21:14
Другие вопросы по тегам:

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