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

В общем случае в именах типов следует использовать фразы на основе существительных, где существительное является сущностью, представляемой типом. Например, Button, Stack и File имеют имена, определяющие сущность, представляемую типом. Выбирайте имена, которые определяют сущность с точки зрения разработчика; имена должны отражать сценарии использования.

При выборе имен типов необходимо следовать приведенным ниже рекомендациям.

В именах классов, интерфейсов и типов значения используйте существительные, фразы на основе существительных или в некоторых случаях фразы на основе прилагательных. Применяйте правила использования прописных и строчных букв языка Pascal.

Не следует использовать в именах префикс (например, букву C).

Исключением из этого правила являются интерфейсы, имена которых начинаются с буквы I.

В конце имени производного класса рекомендуется ставить имя базового класса.

Например, имена типов .NET Framework, наследующих от класса Stream, оканчиваются словом Stream, а имена типов, наследующих от класса Exception, оканчиваются словом Exception.

Для имени интерфейса следует применять в качестве префикса букву "I". Это указывает, что данный тип является интерфейсом.

Необходимо обеспечивать, чтобы при определении пары "класс/интерфейс", где класс является стандартной реализацией интерфейса, имена различались только префиксом "I" в имени интерфейса.

Например, в библиотеке .NET Framework содержится интерфейс IAsyncResult и класс AsyncResult.

Имена параметров универсального типа

Универсальные шаблоны являются важной новой возможностью .NET Framework версии 2.0. В следующих инструкциях рассматривается выбор правильных имен для параметров универсального типа.

При именовании параметров универсальных типов используйте описательные имена, если только однобуквенное имя не является полностью понятным без пояснений, вследствие чего нет необходимости применять описательное имя.

В качестве примера имени интерфейса, выбранного в соответствии с данным правилом, можно привести интерфейс IDictionary<TKey, TValue>.

Для типов с однобуквенными параметрами рекомендуется использовать букву "T" в качестве имени параметра типа.

К описательным именам параметров типа добавляйте префикс в виде буквы "T".

В имени параметра рекомендуется указывать ограничения, накладываемые на параметр типа. Например, параметр, предназначенный только для интерфейса "Isession", может называться "TSession".

Имена общих типов

В следующих рекомендациях приведены соглашения об именовании, помогающие разработчикам понять сценарии использования определенных классов. Там, где в рекомендациях описываются типы, наследующие от другого типа, эти рекомендации относятся ко всем производным типам, а не только к прямым наследникам. Например, руководство "Добавляйте суффикс Exception в типы, которые наследуют от Exception." означает, что любой тип, который имеет Exception в его наследования иерархии должен иметь имя, которое заканчивается в Exception.

Все эти рекомендации также служат для резервирования указанного суффикса; суффикс не следует использовать, если тип не удовлетворяет критериям, приведенным в данной рекомендации. Например, если тип не является прямо или косвенно производным от Exception, его имя не должно оканчиваться словом Exception.

К классам пользовательских атрибутов добавляйте суффикс "Attribute".

В качестве примеров имен типов, удовлетворяющих этой рекомендации, можно назвать атрибуты ObsoleteAttribute и AttributeUsageAttribute.

Добавляйте суффикс "EventHandler" к именам типов, используемых в событиях (таким как возвращаемые типы события C#).

AssemblyLoadEventHandler является именем делегата, удовлетворяющим данной рекомендации.

Добавляйте суффикс "Callback" к имени делегата, не являющегося обработчиком событий.

Не добавляйте к имени делегата суффикс "Delegate".

Добавляйте суффикс "EventArgs" к именам классов, расширяющих класс System.EventArgs.

Не создавайте производных классов от класса "System.Enum"; используйте вместо этого ключевое слово, поддерживаемое используемым языком программирования. Например, в C# используйте ключевое слово "enum".

Добавляйте суффикс "Exception" к типам, наследующим от класса "System.Exception".

Добавляйте суффикс "Dictionary" к типам, реализующим интерфейсы "System.Collections.IDictionary" или "System.Collections.Generic.IDictionary<TKey, TValue>". Обратите внимание, что интерфейс "System.Collections.IDictionary" является особым типом коллекции, но эта рекомендация превалирует над приведенной ниже более общей рекомендацией относительно коллекций.

Добавляйте суффикс "Collection" к типам, реализующим интерфейсы "System.Collections.IEnumerable", "System.Collections.ICollection", "System.Collections.IList", "System.Collections.Generic.IEnumerable<T>", "System.Collections.Generic.ICollection<T>" или "System.Collections.Generic.IList<T>".

Добавляйте суффикс "Stream" к типам, производным от класса "System.IO.Stream".

Добавляйте суффикс "Permission" к типам, производным от класса "System.Security.CodeAccessPermission" или реализующим интерфейс "System.Security.IPermission".

Имена перечислений

Не используйте префиксы в именах значений перечислений. Например, не используйте префикс "ad" для перечислений ADO или "rtf" для перечислений в формате RTF и т. д.

Это также означает, что не следует включать имя типа перечисления в другие имена значений перечислений. В следующем примере кода демонстрируется неправильное именование значений перечислений.

Public Enum Teams

    TeamsAlpha
    TeamsBeta
    TeamsDelta

End Enum
public  enum Teams
{
    TeamsAlpha,
    TeamsBeta,
    TeamsDelta
}

Не используйте "Enum" в качестве суффикса в именах типов перечислений.

Не используйте "Flags" в качестве суффикса в именах перечислений "Flags".

В именах перечислений используйте существительные в единственном числе, если только значения перечислений не являются битовыми полями.

В именах перечислений с битовыми полями в качестве значений, также называемых перечислениями "Flags", используйте существительные во множественном числе.

Фрагменты — © Корпорация Майкрософт (Microsoft Corp.), 2005. Все права защищены.

Фрагменты — © Addison-Wesley Corporation. Все права защищены.

Для дополнительной информации о разработке руководящих принципов, смотрите "руководства по разработке рамок: Конвенций, идиомы и шаблоны для повторного использования.NET библиотек"книга, Кшиштоф Cwalina и Брэд Абрамс, опубликованных Addison-Wesley, 2005 года.

См. также

Другие ресурсы

Руководство по разработке библиотек классов

Правила именования