Именование констант Windows API в C # - PullRequest
13 голосов
/ 29 марта 2012

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

private const int TheAnswer = 42;

Но иногда нам нужно представлять уже существующие константы из Windows API.

Например, я не знаю, как назвать это:

/// <summary>
/// With this style turned on for your form, 
/// Windows double-buffers the form and all its child controls.
/// </summary>
public const int WS_EX_COMPOSITED = 0x02000000;

Как мне это назвать?

Сохранение его как WS_EX_COMPOSITED позволяет мне быстро связать его с WinAPI , но это неправильно.

Некоторые опции:

  • WsExComposited - Слишком венгерский
  • Composited - слишком короткий
  • WsEx перечисление с Composited в нем - Все еще венгерский
  • ExtendedWindowsStyles.Composited - Постоянный в классе? Enum

Следует отметить, что цели для хорошего именования:

  • Он должен быть читаемым.
  • Он не должен вызывать FxCop и StyleCop, даже если это означает скрывать его от них.

Ответы [ 2 ]

15 голосов
/ 29 марта 2012

WS_EX_COMPOSITED отлично подходит для части, которая напрямую взаимодействует с Win API (или любым другим документированным API в этом отношении). Часть, которую вы хотите отобразить, должна следовать стандартным соглашениям - иметь отдельный общедоступный фасад для вызова нативных функций с хорошими именами методов (вы в конечном итоге забудете то, что вы исследовали в отношении конкретных комбинаций флагов, но хорошее имя метода-обертки по крайней мере позволит Вы используете это).

Дополнительным преимуществом сохранения имени как можно ближе к нативному API является то, что вы можете искать константу непосредственно в MSDN / другой документации и сразу же находить ответ. Будет намного сложнее, если вы переименуете его.

0 голосов
/ 01 марта 2018

Может этот поможет новым посетителям с этим вопросом.

Если имя поля или переменной предназначено для соответствия имени элемента, связанного с Win32 или COM, и поэтому должно начинаться с подчеркивания, поместите поле или переменную в специальный класс NativeMethods.Класс NativeMethods - это любой класс, который содержит имя, оканчивающееся на NativeMethods, и предназначен в качестве заполнителя для оболочек Win32 или COM.StyleCop будет игнорировать это нарушение, если элемент помещен в класс NativeMethods.

...