Имена классов, структур и интерфейсов

Примечание.

Это содержимое перепечатывается разрешением 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.

См. также