CA1822: Mark members as static

Property Value
Rule ID CA1822
Title Mark members as static
Category Performance
Fix is breaking or non-breaking Non-breaking - If the member is not visible outside the assembly, regardless of the change you make.

Non-breaking - If you just change the member to an instance member with the this keyword.

Breaking - If you change the member from an instance member to a static member and it is visible outside the assembly.
Enabled by default in .NET 8 As suggestion


A member that does not access instance data is not marked as static (Shared in Visual Basic).

Rule description

Members that do not access instance data or call instance methods can be marked as static (Shared in Visual Basic). After you mark the methods as static, the compiler will emit nonvirtual call sites to these members. Emitting nonvirtual call sites will prevent a check at run time for each call that makes sure that the current object pointer is non-null. This can achieve a measurable performance gain for performance-sensitive code. In some cases, the failure to access the current object instance represents a correctness issue.

How to fix violations

Mark the member as static (or Shared in Visual Basic) or use 'this'/'Me' in the method body, if appropriate.

When to suppress warnings

It is safe to suppress a warning from this rule for previously shipped code for which the fix would be a breaking change.

Suppress a warning

If you just want to suppress a single violation, add preprocessor directives to your source file to disable and then re-enable the rule.

#pragma warning disable CA1822
// The code that's violating the rule is on this line.
#pragma warning restore CA1822

To disable the rule for a file, folder, or project, set its severity to none in the configuration file.

dotnet_diagnostic.CA1822.severity = none

For more information, see How to suppress code analysis warnings.

Configure code to analyze

Use the following option to configure which parts of your codebase to run this rule on.

You can configure this option for just this rule, for all rules it applies to, or for all rules in this category (Performance) 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