ReSharper 2026.1 Help

コードインスペクション: メンバーは静的(共有)にできます(private アクセス)

以下のメソッド Print を考えてみましょう。

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 は、 Print がインスタンスとして使用されておらず、静的にできることを示しています。 しかし、なぜでしょうか? 実際には、特定の状況下で静的メンバーは少しだけパフォーマンス向上をもたらします。

Microsoft のドキュメントはこれについて何を言いたいのですか?

- インスタンスデータにアクセスせず、インスタンスメソッドを呼び出さないメンバーは静的(Visual Basic では共有)としてマークできます。 メソッドを静的にマークすると、コンパイラーはこれらのメンバーへの非仮想呼び出しサイトを生成します。 非仮想呼び出しサイトを生成することで、各呼び出し時に現在のオブジェクトポインターが null でないことを確認するランタイムでのチェックを防ぎます。 これにより、パフォーマンス重視のコードでは測定可能なパフォーマンス向上が得られます。 場合によっては、現在のオブジェクトインスタンスへアクセスできないことが正しさの問題になることがあります。

2026 年 6 月 12 日