Ескертпе
Бұл бетке кіру үшін қатынас шегін айқындау қажет. Жүйеге кіруді немесе каталогтарды өзгертуді байқап көруге болады.
Бұл бетке кіру үшін қатынас шегін айқындау қажет. Каталогтарды өзгертуді байқап көруге болады.
Замечание
Это содержимое перепечатывается разрешением Pearson Education, Inc. из руководства по проектированию платформы: соглашения, идиомы и шаблоны для повторно используемых библиотек .NET, 2-го выпуска. Этот выпуск был опубликован в 2008 году, и книга с тех пор была полностью пересмотрена в третьем выпуске. Некоторые сведения на этой странице могут быть устаревшими.
Приведенные ниже рекомендации по именованию применяются к именованию общих типов.
✔️ Давайте называть классы и структуры существительными или фразами на основе существительных, используя PascalCasing.
Это отличает имена типов от методов, которые именуются глагольными конструкциями.
✔️ Именуйте интерфейсы прилагательными группами или, иногда, существительными или группами существительных.
Существительные и именные фразы должны использоваться редко, так как они могут указывать на то, что тип должен быть абстрактным классом, а не интерфейсом.
❌ НЕ присваивайте имена классов префиксу (например, "C").
✔️ Рассмотрите возможность завершения имени производных классов с именем базового класса.
Это очень удобочитаемо и четко объясняет связь. Некоторые примеры этого в коде: ArgumentOutOfRangeException, который является разновидностью Exception, и SerializableAttribute, который является разновидностью Attribute. Однако важно проявлять здравый смысл при применении этого руководства, например, класс Button является типом события Control, хотя Control не встречается в его названии.
✔️ ДОБАВЛЯЙТЕ префикс букву I к именам интерфейсов, чтобы указать, что тип является интерфейсом.
Например, IComponent (описательное существительное), ICustomAttributeProvider (фраза существительного) и IPersistable (прилагательная) являются соответствующими именами интерфейсов. Как и в случае с другими именами типов, избегайте аббревиаций.
✔️ Убедитесь, что имена отличаются только префиксом "I" в имени интерфейса при определении пары интерфейсов класса, где класс является стандартной реализацией интерфейса.
Имена параметров универсального типа
Дженерики были добавлены в .NET Framework 2.0. Эта функция представила новый тип идентификатора, называемого параметром типа.
✔️ Давайте давать параметрам универсального типа описательные имена, если только однобуквенные имена не являются полностью самоочевидными, а описательное имя не добавляет ценности.
✔️ Рекомендуется использовать T в качестве имени параметра типа для типов с одним параметром типа однобуквенный.
public int IComparer<T> { ... }
public delegate bool Predicate<T>(T item);
public struct Nullable<T> where T:struct { ... }
✔️ Используйте 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 для перечислений с форматированным текстом и т. д.).
© Часть 2005, 2009 Корпорация Майкрософт. Все права защищены.
Перепечатан с разрешения Pearson Education, Inc. из Руководство по проектированию: Соглашения, идиомы и шаблоны для повторного использования библиотек .NET, 2-е издание Кшиштоф Чвалина и Брэд Абрамс, опубликованное 22 октября 2008 года Addison-Wesley Профессиональный в рамках серии разработки Microsoft Windows.