Соглашения о присвоении имен C# для акронимов

Относительно именования C# для акронимов, если я писал, библиотека, связанная с Windows API, является там какой-либо сильной конвенцией или к WindowsApi или к WindowsAPI или является этим просто персональное предпочтение?

62
задан Ashwin Nanjappa 3 September 2013 в 05:47
поделиться

7 ответов

Существует конвенция, в которой для всех аббревиатур длиной более 2-х символов указывается начальный заглавный, остальные строчные. Отсюда HttpContext и ClientID.

61
ответ дан 24 November 2019 в 16:43
поделиться

пробовали ли вы кварцевую рамку ?

-121--1264834-

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

$('#foo').val('poo')
alert($('#foo').val())

и это отображало измененное значение.

-121--1296152-

« Рамки Руководство по проектированию » 2-го издания Кшиштофа Цвалины и Штифтика Абрамса рр.40-42

3,1,2 Прописные акронимы

DO прописывают оба символа на двухсимвольных акронимах, за исключением первого слова верблюжьего идентификатора.

System.IO
public void StartIO(Stream ioStream)

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

System.Xml
public void ProcessHtmlTag(string htmlTag)

НЕ ИСПОЛЬЗУЙТЕ заглавную букву любого из символов каких-либо акронимов, независимо от их длины, в начале верблюжьего идентификатора.

37
ответ дан 24 November 2019 в 16:43
поделиться

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

Более серьезно (люди, похоже, читают вышеперечисленное, несмотря на цитату ниже), Эта страница говорит:

Любые аббревиатуры из трех или более букв должны быть случайным случаем, а не все кепки Отказ

Поскольку API считается хорошо известной аббревиатурой, имя WindowsAPI - это то, чтобы выбрать, если вы хотите следовать рекомендациям.

8
ответ дан 24 November 2019 в 16:43
поделиться

Его личные предпочтения. Но .NET будет использовать WindowsApi. Это сродни названию TcpClient.

3
ответ дан 24 November 2019 в 16:43
поделиться

Это все личное (или организационное) предпочтение. Пока вы последовательны, вы будете в порядке.

Сама .NET Framework будет использовать WindowsAPI.

3
ответ дан 24 November 2019 в 16:43
поделиться

Обратите внимание на FXCOP. Это хорошая утилита, которая поможет с такими проблемами.

1
ответ дан 24 November 2019 в 16:43
поделиться

Это зависит от того, что вы имеете в виду под «primitive»

«Primitive» в Java обычно принимают за «value type». Однако C # имеет ключевое слово последовательностей , которое действует точно так же, как и Последовательность Java, оно просто выделяется редактором по-разному. Они являются псевдонимами для классов System. Последовательность или java.lang. Последовательность . Последовательность не является типом значения ни на одном языке, поэтому таким образом она не является примитивом.

Если под «примитивом» подразумевается встроенный в язык, то последовательность является примитивом. Просто используется заглавная буква. Строковые литералы (в кавычках) автоматически преобразуются в System.String и + используется для конкатенации. Таким образом, они (и Массивы) являются такими же примитивными, как ints, longs и т. д.

Во-первых, что такой Ряд?

Последовательность не является оберткой. Последовательность - это ссылочный тип , а примитивные типы - типы значений . Это означает, что если у вас есть:

int x = 5;
int y = x;

Память x и y оба содержат «5». Но с:

String x = "a";
String y = x;

Память x и y оба содержат указатель на символ «a» (и длину, смещение, указатель ClassInfo и монитор). Последовательности ведут себя как примитив, потому что они незыблемы, поэтому обычно это не проблема, однако если вы, скажем, использовали отражение, чтобы изменить содержимое последовательности ( не делать этого! ), как x, так и y увидят изменение. На самом деле, если у вас есть:

char[] x = "a".toCharArray();
char[] y = x;
x[0] = 'b';
System.out.println(y[0] == 'b'); // prints "true"

Так что не просто использовать char [] (если это не поведение вы хотите, или вы действительно пытаетесь уменьшить использование памяти).

Каждый объект является ссылочным типом - это означает все записываемые классы, каждый класс в рамку и даже массивы. Единственными вещами, которые являются ценностными типами, являются простые числовые типы (int, long, short, byte, float, double, char, bool и т. д.)

Почему последовательность не может изменяться как char []?

Для этого есть несколько причин, но в основном это сводится к психологии и деталям реализации:

  • Представьте себе хаос, который был бы у вас, если бы вы передали последовательность в другую функцию и эта функция каким-то образом изменила ее. Или что, если она где-то спасла и изменила в будущем? Для большинства ссылочных типов, вы принимаете это как часть типа, но разработчики Java решили, что, по крайней мере для последовательностей, они не хотят, чтобы пользователи должны беспокоиться об этом.
  • Последовательности не могут рассматриваться атомарно, что означает, что многопоточность/синхронизация могут стать проблемой.
  • Последовательности литералы (то, что вы помещаете в код в кавычках) могут быть неизменными на уровне компьютера 1 (по соображениям безопасности). Это может быть достигнуто путем копирования их всех в другую часть памяти при запуске программы или с помощью копирования при записи, но это медленно .

Почему у нас нет версии последовательности типа value?

В основном, детализация производительности и реализации, а также сложность наличия 2 различных типов последовательностей. Другие типы значений имеют фиксированный объем памяти.Int - это всегда 32 бит, long - это всегда 64 бит, bool - это всегда 1 бит и т. д. 2 Помимо прочего, это означает, что они могут храниться в стеке, так что все параметры функции живут в одном месте. Кроме того, создание гигантских копий последовательностей по всему месту может убить производительность.

См. также: Почему в C # последовательность является ссылочным типом, который ведет себя как тип значения? . Относится к .NET, но это так же применимо в Java.

1 - В C/C + + и других самокомпилируемых языках это верно, потому что они помещаются в сегмент кода процесса, который ОС обычно останавливает редактирование. В Java это на самом деле обычно не соответствует действительности, так как JVM загружает файлы классов в кучу, чтобы там можно было редактировать последовательность. Однако нет причин, по которым Java-программа не может быть скомпилирована (есть инструменты, которые делают это), и некоторые архитектуры (особенно некоторые версии ARM) выполняют непосредственно байт-код Java.

2 - На практике некоторые из этих типов имеют различный размер на уровне машины. E.x. буллы хранятся в стеке как WORD-size (32 бита на x86, 64 бита на x64). В классах/массивах они могут обрабатываться по-разному. Это все детали реализации, которые остались до JVM - спецификация говорит, что булы являются либо истинными, либо ложными, и машина может выяснить, как это сделать.

-121--1706242-

В окнах необходимо получить доступ к идентификатору необработанного устройства в виде файла. Он должен работать, если вы передаете файл «\\.\c: », вы используете UNC-имя устройства\.\c: (\. означает эту машину).

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

-121--2313435-

Проверьте официальные документы корпорации Майкрософт в разделе Правила именования и прописные буквы :

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

  • PascalCosure
  • camelCosure

Соглашение PascalCosure , используемое для всех идентификаторов, за исключением имен параметров, содержит первый символ каждого слова (включая сокращения длиной более двух букв), как показано в следующих примерах:

  • PropertyDescriptor
  • GroupTag

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

  • IOStream

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

  • propertyDescriptor
  • ioStream
  • htmlTag

✓ DO использует PascalCose для всех имен открытых членов, типов и пространств имен, состоящих из нескольких слов.

✓ DO используйте camelCosure для имен параметров.

10
ответ дан 24 November 2019 в 16:43
поделиться
Другие вопросы по тегам:

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