Имена классов, структур и интерфейсов
Примечание.
Это содержимое перепечатывается разрешением Pearson Education, Inc. из руководства по проектированию платформы: соглашения, идиомы и шаблоны для повторно используемых библиотек .NET, 2-го выпуска. Этот выпуск был опубликован в 2008 году, и книга с тех пор была полностью пересмотрена в третьем выпуске. Некоторые сведения на этой странице могут быть устаревшими.
Приведенные ниже рекомендации по именованию применяются к именованию общих типов.
✔️ Классы и структуры DO с существительными или существительными фразами с помощью PascalCasing.
Это различает имена типов от методов, которые именуются с фразами команды.
✔️ Do name интерфейсы с прилагательными фразами или иногда с существительными или существительными фразами.
Существительные и существительные фразы должны использоваться редко, и они могут указывать, что тип должен быть абстрактным классом, а не интерфейсом.
❌ НЕ присваивайте имена классов префиксу (например, "C").
✔️ Рассмотрите возможность завершения имени производных классов с именем базового класса.
Это очень удобочитаемо и четко объясняет связь. Ниже приведены некоторые примеры в коде: ArgumentOutOfRangeException
это тип, который является типом Exception
, который SerializableAttribute
является типом Attribute
. Однако важно использовать разумное решение при применении этого руководства; Например, Button
класс является типом Control
события, хотя Control
не отображается в его имени.
✔️ Имена интерфейсов префикса DO с буквой I, чтобы указать, что тип является интерфейсом.
Например, IComponent
(описательное существительное), ICustomAttributeProvider
(фраза существительного) и IPersistable
(прилагательная) являются соответствующими именами интерфейсов. Как и в случае с другими именами типов, избегайте аббревиаций.
✔️ Убедитесь, что имена отличаются только префиксом "I" в имени интерфейса при определении пары интерфейсов класса, где класс является стандартной реализацией интерфейса.
Имена параметров универсального типа
Универсальные шаблоны были добавлены в платформа .NET Framework 2.0. Эта функция представила новый тип идентификатора, называемого параметром типа.
✔️ Параметры универсального типа DO с описательными именами, если только однобуквенные имена не являются полностью самоображательными, а описательное имя не будет добавлять значение.
✔️ Рекомендуется использовать T
в качестве имени параметра типа для типов с одним параметром типа однобуквенный.
public int IComparer<T> { ... }
public delegate bool Predicate<T>(T item);
public struct Nullable<T> where T:struct { ... }
✔️ Имена параметров дескриптивного типа DO с T
префиксом.
public interface ISessionChannel<TSession> where TSession : ISession {
TSession Session { get; }
}
✔️ РЕКОМЕНДУЕТСЯ указывать ограничения, помещенные в параметр типа в имени параметра.
Например, параметр, ограниченный ISession
для вызова TSession
.
Имена распространенных типов
✔️ Выполните инструкции, описанные в следующей таблице, при именовании типов, производных от определенных платформа .NET Framework типов.
Базовый тип | Руководство по производным и реализации типов |
---|---|
System.Attribute |
✔️ Добавьте суффикс "Attribute" в имена пользовательских классов атрибутов. |
System.Delegate |
✔️ Добавьте суффикс EventHandler в имена делегатов, которые используются в событиях. ✔️ Добавьте суффикс "Callback" в имена делегатов, отличных от тех, которые используются в качестве обработчиков событий. ❌ Не добавляйте суффикс "Делегат" в делегат. |
System.EventArgs |
✔️ Добавьте суффикс EventArgs. |
System.Enum |
❌НЕ наследуйтесь от этого класса; вместо этого используйте ключевое слово, поддерживаемые языком. Например, в C#используйте enum ключевое слово.❌ НЕ добавляйте суффикс "Enum" или "Flag". |
System.Exception |
✔️ Добавьте суффикс "Исключение". |
IDictionary IDictionary<TKey,TValue> |
✔️ Добавьте суффикс "Словарь". Обратите внимание, что IDictionary это определенный тип коллекции, но это руководство имеет приоритет над более общим руководством по коллекциям, приведенным ниже. |
IEnumerable ICollection IList IEnumerable<T> ICollection<T> IList<T> |
✔️ Добавьте суффикс "Коллекция". |
System.IO.Stream |
✔️ Добавьте суффикс Stream. |
CodeAccessPermission IPermission |
✔️ Добавьте суффикс "Разрешение". |
Перечисления именования
Имена типов перечисления (также называемые перечислениями) в целом должны соответствовать стандартным правилам именования типов (PascalCasing и т. д.). Однако существуют дополнительные рекомендации, которые применяются специально к перечислениям.
✔️ Используйте имя сингулярного типа для перечисления, если его значения не являются битовыми полями.
✔️ Используйте имя множественного типа для перечисления с битовых полей в качестве значений, также называемых перечислением флагов.
❌ Не используйте суффикс "Enum" в именах типов перечисления.
❌ Не используйте суффиксы "Flag" или "Flags" в именах типов перечисления.
❌ Не используйте префикс для имен значений перечисления (например, "ad" для перечислений ADO, RTF для перечислений с форматированным текстом и т. д.).
Фрагменты: © Корпорация Майкрософт (Microsoft Corporation), 2005, 2009. Все права защищены.
Перепечатано с разрешения Pearson Education, Inc. из книги Инфраструктура программных проектов. Соглашения, идиомы и шаблоны для многократно используемых библиотек .NET (2-е издание), авторы: Кржиштоф Цвалина (Krzysztof Cwalina) и Брэд Абрамс (Brad Abrams). Книга опубликована 22 октября 2008 г. издательством Addison-Wesley Professional в рамках серии, посвященной разработке для Microsoft Windows.