CA1715: Identifiers should have correct prefix
Property | Value |
---|---|
Rule ID | CA1715 |
Title | Identifiers should have correct prefix |
Category | Naming |
Fix is breaking or non-breaking | Breaking - when fired on interfaces. Non-breaking - when raised on generic type parameters. |
Enabled by default in .NET 8 | No |
Cause
The name of an interface does not start with an uppercase 'I'.
-or-
The name of a generic type parameter on a type or method does not start with an uppercase 'T'.
By default, this rule only looks at externally visible interfaces, types, and methods, but this is configurable.
Rule description
By convention, the names of certain programming elements start with a specific prefix.
Interface names should start with an uppercase 'I' followed by another uppercase letter. This rule reports violations for interface names such as 'MyInterface' and 'IsolatedInterface'.
Generic type parameter names should start with an uppercase 'T' and optionally may be followed by another uppercase letter. This rule reports violations for generic type parameter names such as 'V' and 'Type'.
Naming conventions provide a common look for libraries that target the common language runtime. This reduces the learning curve that is required for new software libraries, and increases customer confidence that the library was developed by someone who has expertise in developing managed code.
Configure code to analyze
Use the following options to configure which parts of your codebase to run this rule on.
You can configure these options for just this rule, for all rules it applies to, or for all rules in this category (Naming) that it applies to. For more information, see Code quality rule configuration options.
Include specific API surfaces
You can configure which parts of your codebase to run this rule on, based on their accessibility. For example, to specify that the rule should run only against the non-public API surface, add the following key-value pair to an .editorconfig file in your project:
dotnet_code_quality.CAXXXX.api_surface = private, internal
Single-character type parameters
You can configure whether or not to exclude single-character type parameters from this rule. For example, to specify that this rule should not analyze single-character type parameters, add one of the following key-value pairs to an .editorconfig file in your project:
# 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
Note
This rule never fires for a type parameter named T
, for example, Collection<T>
.
How to fix violations
Rename the identifier so that it is correctly prefixed.
When to suppress warnings
Do not suppress a warning from this rule.
Interface naming example
The following code snippet shows an incorrectly named interface:
' Violates this rule
Public Interface Book
ReadOnly Property Title() As String
Sub Read()
End Interface
// Violation.
public interface Book
{
string Title
{
get;
}
void Read();
}
The following code snippet fixes the previous violation by prefixing the interface with '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
Type parameter naming example
The following code snippet shows an incorrectly named generic type parameter:
' Violates this rule
Public Class Collection(Of Item)
End Class
// Violation.
public class Collection<Item>
{
}
The following code snippet fixes the previous violation by prefixing the generic type parameter with '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