Примечание
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Замечание
Это содержимое перепечатывается разрешением 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.