CA1822: Mark members as static


This article applies to Visual Studio 2015. If you're looking for the latest Visual Studio documentation, see Visual Studio documentation. We recommend upgrading to the latest version of Visual Studio. Download it here

For the latest documentation on Visual Studio, see CA1822: Mark members as static.

Item Value
TypeName MarkMembersAsStatic
CheckId CA1822
Category Microsoft.Performance
Breaking Change 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.


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 runtime 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.

CA1811: Avoid uncalled private code

CA1812: Avoid uninstantiated internal classes

CA1804: Remove unused locals