CA1715: идентификаторы должны иметь правильные префиксы
Свойство | Значение |
---|---|
Идентификатор правила | CA1715 |
Заголовок | Идентификаторы должны иметь правильные префиксы |
Категория | Именование |
Исправление является критическим или не критическим | Критическое — при срабатывании в интерфейсах. Не критическое — при срабатывании в параметрах универсального типа. |
Включен по умолчанию в .NET 8 | No |
Причина
Имя интерфейса не начинается с прописной буквы "I".
–или–
Имя параметра универсального типа в типе или методе не начинается с прописной буквы "Т".
По умолчанию это правило проверяет только видимые извне интерфейсы, типы и методы, но это поведение можно настроить.
Описание правила
По соглашению имена некоторых программных элементов начинаются с определенного префикса.
Имена интерфейсов должны начинаться с прописной буквы "I", за которой следует другая прописная буква. Это правило сообщает о нарушениях для таких имен интерфейсов, как MyInterface и IsolatedInterface.
Имена параметров универсального типа должны начинаться с прописной буквы "T", за которой при необходимости может следовать еще одна прописная буква. Это правило сообщает о нарушениях для таких имен параметров универсального типа, как "V" и "Type".
Соглашения об именовании обеспечивают единство вида библиотек, предназначенных для среды CLR. Это сокращает время, необходимое для изучения новых библиотек программного обеспечения, и позволяет клиентам увериться в том, что разработчик библиотеки имеет опыт разработки управляемого кода.
Настройка кода для анализа
Используйте следующие параметры, чтобы указать части базы кода, к которым будет применяться это правило.
Эти параметры можно настроить только для этого правила, для всех правил, к которым она применяется, или для всех правил в этой категории (именование), к которым она применяется. Дополнительные сведения см. в статье Параметры конфигурации правила качества кода.
Включение определенных контактных зон API
Вы можете настроить, для каких частей базы кода следует выполнять это правило в зависимости от их доступности. Например, чтобы указать, что правило должно выполняться только для закрытой контактной зоны API, добавьте следующую пару "ключ-значение" в файл EDITORCONFIG в своем проекте:
dotnet_code_quality.CAXXXX.api_surface = private, internal
Параметры типа с одним символом
Вы можете указать, следует ли исключать из этого правила параметры типа из одного символа. Например, чтобы указать, что это правило не должно анализировать параметры типа из одного символа, добавьте одну из следующих пар "ключ-значение" в файл editorconfig в проекте:
# Package version 2.9.0 and later
dotnet_code_quality.CA1715.exclude_single_letter_type_parameters = true
# Package version 2.6.3 and earlier
dotnet_code_quality.CA2007.allow_single_letter_type_parameters = true
Примечание.
Это правило никогда не срабатывает для параметра типа с именем T
, например Collection<T>
.
Устранение нарушений
Переименуйте идентификатор таким образом, чтобы у него был правильный префикс.
Когда лучше отключить предупреждения
Для этого правила отключать вывод предупреждений не следует.
Пример именования интерфейса
В следующем фрагменте кода показан неверно именованный интерфейс:
' Violates this rule
Public Interface Book
ReadOnly Property Title() As String
Sub Read()
End Interface
// Violation.
public interface Book
{
string Title
{
get;
}
void Read();
}
Следующий фрагмент кода устраняет предыдущее нарушение, добавляя к интерфейсу префикс "I":
// Fixes the violation by prefixing the interface with 'I'.
public interface IBook
{
string Title
{
get;
}
void Read();
}
' Fixes the violation by prefixing the interface with 'I'
Public Interface IBook
ReadOnly Property Title() As String
Sub Read()
End Interface
Пример именования параметров типа
В следующем фрагменте кода показан неверно именованный параметр универсального типа:
' Violates this rule
Public Class Collection(Of Item)
End Class
// Violation.
public class Collection<Item>
{
}
Следующий фрагмент кода устраняет предыдущее нарушение, добавляя к параметру универсального типа префикс "T":
// Fixes the violation by prefixing the generic type parameter with 'T'.
public class Collection<TItem>
{
}
' Fixes the violation by prefixing the generic type parameter with 'T'
Public Class Collection(Of TItem)
End Class