ReSharper 2024.1 Help

Code Inspection: Member can be made static (shared) (private accessibility)

Category

Common Practices and Code Improvements

ID

MemberCanBeMadeStatic.Local

EditorConfig

resharper_member_can_be_made_static_local_highlighting

Default severity

Hint

Language

C#, VB.NET

Requires SWA

No

Consider the method Print below:

public class Foo { public void Test() { Print("John"); } private void Print(string name) { Console.WriteLine("Hello, {0}!", name); } }
Public Class Foo Public Sub Test() Print("John") End Sub Private Sub Print(name As String) Console.WriteLine("Hello, {0}!", name) End Sub End Class

ReSharper suggests that Print has no instance usages and can be made static. But what’s the point? Well, as it turns out, static members yield a small performance benefit under particular circumstances.

Here’s what the Microsoft documentation has to say about it:

- 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 non-virtual 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.

Last modified: 15 April 2024