Какие символы разрешены в имени класса C #? - PullRequest
58 голосов
/ 04 июня 2009

Какие символы разрешены, а какие недопустимы в имени класса C #? Не могли бы вы помочь?

РЕДАКТИРОВАТЬ: указать. Какие специальные символы разрешены? Пожалуйста, будьте конкретны, потому что ссылки на спецификации на 50 страниц на высокотехнологичном языке - не тот ответ, который мне очень поможет.

ОБЪЯСНЕНИЕ: я пытаюсь разделить имя класса на различимые части, например:

класс Person @ WorkOffice @ Helper @ Class

{

}

И я думаю о способе использования какого-либо персонажа или чего-то еще, чтобы можно было получить части Person, WorkOffice, Helper и Class из этого имени класса.

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

Ответы [ 5 ]

61 голосов
/ 04 июня 2009

Детали спецификации здесь . По сути, любой символ Unicode (включая экранирование Unicode) в классах символов Lu , Ll , Lt , Lm , Lo , Nl , Mn , Mc , Nd , Pc , и Ср . Первый символ является исключением и должен быть буквой (классы Lu , Ll , Lt , Lm или Lo ) или подчеркивание. Кроме того, если идентификатор является ключевым словом, вы должны поставить перед ним знак @. В противном случае @ является необязательным.

23 голосов
/ 04 июня 2009

Допустимые идентификаторы в C # определены в Спецификации языка C # , элемент 9.4.2. Правила очень просты:

  • Идентификатор должен начинаться с буквы или подчеркивания
  • После первого символа он может содержать цифры, буквы, соединители и т. Д.
  • Если идентификатор является ключевым словом, перед ним должно стоять «@»

источник

13 голосов
/ 29 июля 2010

Категории Unicode можно найти здесь: http://www.dpawson.co.uk/xsl/rev2/UnicodeCategories.html

И оттуда вы можете выбрать большинство вещей из групп (из спецификаций , на которые другие тоже правильно указали):

Lu, Ll, Lt, Lm, Lo, Nl, Mn, Mc, Nd, Pc, Cf

Имейте в виду, однако, что Visual Studio (или это Resharper) не обязательно будет любить их всех, но большинство из них компилируются. Взять, к примеру, персонажа 30FB KATAKANA MIDDLE DOT. Он хорошо компилируется, но с IDE не очень хорошо работает. Но эта странная штука FE34. ПРЕЗЕНТАЦИОННАЯ ФОРМА ДЛЯ ВЕРТИКАЛЬНОЙ ВОЛНЫ LOW LINE работает просто отлично.

Вот разделитель, который отлично работает:

class Person〱WorkOffice〱Helper〱Class
{

}

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

РЕДАКТИРОВАТЬ: обратите внимание, что в спецификации сказано, что он допускает символы из Unicode 3.0 . Я упустил это из виду и удивился, почему многие персонажи не работают, хотя они были из правильных групп. Проверьте этот вопрос для деталей .

3 голосов
/ 05 июня 2009

Обратите внимание, что, как указывает thecoop, термин «символ» в контексте Unicode намного шире, чем просто буквы алфавита.

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

Как пример:

  • Удерживая клавишу ALT
  • Введите «0394» на клавиатуре
  • Выпуск ALT

Добавит греческую прописную букву Delta к вашему коду ... это допустимая буква идентификатора, что касается C #.

Обратите внимание, что соответствие CLS выходит за рамки ... но, судя по звукам, вы можете не слишком беспокоиться об этом.

0 голосов
/ 10 января 2019

Вот статья, которая может оказаться вам полезной: Стандарты кодирования C # и соглашения об именах

table

Короче говоря, как правило, первое слово / часть / буква объекта - в нижнем регистре , а в классе в верхнем регистре

Например:

HtmlHelper htmlHelper; 
FtpTransfer ftpTransfer;
UIControl uiControl;
...